不能腌制<type'斯特林吉'>使用Databricks PySpark并行化

2024-05-16 11:48:10 发布

您现在位置:Python中文网/ 问答频道 /正文

我读过一些关于workers上串行化的多处理模块的问题,其中cStringIO.StringO不能被pickle。但是,我有一个cStringIO.StringI(注意最后一个大写字母'I',我想是'input'的意思)。我不知道怎么解决这个问题。我正在尝试使用PyPDF2将一系列S3 bucket键映射到Pdf对象。到目前为止,如果我在我的本地系统上这样做是好的,但是如果我在工人身上这样做,那就错了。这是带有错误消息的代码:

def createPdfObject(pdfIdKey):
  pdfId = str(pdfIdKey[0])
  pdfKey = pdfIdKey[1]
  pdfKey.get_contents_to_filename(pdfId+'.pdf')
  try:
    pdfObj = pdf.PdfFileReader(pdfId+'.pdf')
  except pdf.utils.PdfReadError as ex:
    pdfObj = None
    message = "Traceback: {0}\nException: {1} for PDF id: {2}. Arguments:\n{3!r}\nIgnoring this file. Returned NoneType"\
      .format(traceback.format_exc(), type(ex).__name__, pdfId, ex.args)
    print message
    pass
  return (pdfId, pdfObj)

pdfDataRDD = filesRDD.map(lambda x: createPdfObject(x))

在Databricks服务器上没有完全回溯的错误(超长):

^{pr2}$

Tags: 模块formatmessagepdf错误exworkers串行化