每当我尝试通过代码读取多个 pdf 时,都会收到此错误 PythonException: 'KeyError: '/Root'' 。我的数据框包含 pdf 详细信息列表,包括内容和元数据。如果 df 仅包含一条记录,那么下面的代码可以正常工作,但是一旦我为下一个 pdf 添加另一行,代码就会给出上述错误。
import pypdf
from pyspark.sql.functions import udf
from pyspark.sql.types import ArrayType, StringType
from pyspark.sql.functions import explode, col
import io
# define function to read pdf file using pypdf
def read_pdf(filebytes: bytes):
pdf_reader = pypdf.PdfReader(io.BytesIO(filebytes))
pages = []
for page_num in range(len(pdf_reader.pages)):
page = pdf_reader.pages[page_num]
text = page.extract_text()
pages.append(text)
return pages
# create UDF to apply the read_pdf function to each row of the DataFrame
read_pdf_udf = udf(read_pdf, (StringType()))
pdf_text = df.select(read_pdf_udf('content').alias('text'))
display(pdf_text)
任何人都可以帮我让这个工作适用于多个 pdf 文件吗?
这是在 Databricks 中的 Spark 集群上运行的,我尝试一步一步地研究该函数,因为这是一个 UDF 无法真正进入。
您要么通过了非 pdf 文档,要么 pdf 已损坏。删除损坏的 pdf 或处理错误。