Проблема с памятью при сериализации заархивированных файлов в PySpark на DatabricksPython

Программы на Python
Ответить
Anonymous
 Проблема с памятью при сериализации заархивированных файлов в PySpark на Databricks

Сообщение Anonymous »

Я хочу разархивировать множество файлов в формате 7z в PySpark на Databricks.
Zip-файлы содержат несколько тысяч крошечных файлов.
Я читаю файлы, используя двоичный файл, и я используйте UDF для разархивирования файлов:

Код: Выделить всё

schema = ArrayType(StringType())

@F.udf(returnType=schema)
def unzip_content_udf(content):
extracted_files = []

with py7zr.SevenZipFile(io.BytesIO(content), mode='r') as z:
for name, bytes_stream in z.readall().items():
if name.startswith("v1") or name.startswith("v2"):
unzipped_content = bytes_stream.read().decode(ENCODING)
extracted_files.append(unzipped_content)
return extracted_files

df = spark.read.format("binaryFile").load("/mnt/file_pattern*")
df = df.withColumn("unzipped_files", unzip_content_udf(F.col("content")))
df.write.mode("overwrite").parquet("/mnt/test_dump_unzipped")
Это хорошо работает для файлов меньшего размера, но если я укажу один из файлов большего размера (150 МБ в архиве, 4,5 ГБ в разархивированном виде), процесс завершится, и я получу:

Код: Выделить всё

Py4JJavaError: An error occurred while calling o1665.parquet.
ValueError: can not serialize object larger than 2G
Думаю, это имеет смысл, поскольку предел сериализации меньше размера разархивированного файла.
Есть ли у вас какие-либо идеи о том, как увеличить предел или размер фрагмента операции разархивирования ниже предела?

Подробнее здесь: https://stackoverflow.com/questions/792 ... databricks
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Python»