pysaprk dataframe пишет очень медленно - PullRequest
0 голосов
/ 21 января 2020

Мы записываем фрейм данных spark в паркет с разделением по (год, месяц, дата) и с режимом добавления. Проблема здесь заключается в том, что, поскольку данные увеличиваются в месте хранения (где хранятся файлы паркета), время, необходимое для записи, резко увеличивается. Когда я проверил журналы, я обнаружил, что filescanRDD читает все файлы паркета, доступные в хранилище. Есть ли способ улучшить производительность.

пример кода:

df.repartition('day').write.partitionBy('year','month','day').parquet("location",mode='append')

Ниже приведен журнал, в котором есть промежуток времени с 4:10: 15 до 5:10:15. ничего не вижу.

20/01/23 04:10:15 INFO metrics: type=HISTOGRAM, name=application_1577238363313_31976.1.CodeGenerator.sourceCodeSize, count=394, min=430, max=467509, mean=4483.268903934098, stddev=5676.791863953458, median=2491.0, p75=4394.0, p95=15365.0, p98=24887.0, p99=32063.0, p999=32063.0
20/01/23 05:10:15 INFO metrics: type=GAUGE, name=application_1577238363313_31976.1.NettyBlockTransfer.shuffle-client.usedDirectMemory, value=50331648
20/01/23 05:10:15 INFO metrics: type=GAUGE, name=application_1577238363313_31976.1.NettyBlockTransfer.shuffle-client.usedHeapMemory, value=50331648
20/01/23 05:10:15 INFO metrics: type=GAUGE, name=application_1577238363313_31976.1.NettyBlockTransfer.shuffle-server.usedDirectMemory, value=50331648
20/01/23 05:10:15 INFO metrics: type=GAUGE, name=application_1577238363313_31976.1.NettyBlockTransfer.shuffle-server.usedHeapMemory, value=50331648

Ответы [ 2 ]

0 голосов
/ 21 января 2020

Проблема в функции вашего раздела. Вы должны создать разделы в памяти перед разделами диска, как показано ниже.

df=df1.repartition(col("year"),col("month"),col("day"))
df.coalesce(2).write.partitionBy('year','month','day').parquet("location",mode='append')

Ссылка: https://mungingdata.com/apache-spark/partitionby/

0 голосов
/ 21 января 2020

Ваша проблема связана с mode=append. В этом режиме Spark считывает все файлы в месте назначения, чтобы создать новые имена файлов. Вы можете использовать, чтобы изменить parquet.enable.summary-metadata на False.:

sparkConf.set("parquet.enable.summary-metadata", "false")

Вы можете экспортировать свои файлы в другой каталог, и они перемещают их вручную в нужный каталог.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...