通过 PartitionBy 数据帧将 Pyspark 数据帧写入镶木地板变得非常慢

问题描述 投票:0回答:1

我有一个 pyspark 数据框,它执行多个 groupby、pivot 类型的转换,当我在应用所有提到的转换后获得最终数据框时。通过分区将 df 以 parquet 形式写回

执行需要接近 1.67 小时 不。节点 * 编号每个节点的核心数 * 1 = 10 * 32 * 1

df.repartition(320)

df.write.partitionBy('year').mode('overwrite').parquet.path(PATH)

此外,我也尝试删除 repartition,即使它或多或少需要相同的时间。

python apache-spark pyspark apache-spark-sql pyspark-pandas
1个回答
0
投票

一些建议是

  1. 对在多个地方使用的数据帧使用持久/缓存。根据评论,df可以被持久化/缓存。
  2. 查看连接键是否倾斜。如果是,请使用加盐密钥进行加入。如果其中一个数据帧较小,请考虑广播。
  3. 不要使用默认的执行器配置,而是尝试执行器调整,例如每个执行器的核心数、执行器实例、执行器内存、随机分区等。
  4. 使用合并而不是重新分区,因为这样可以避免洗牌。
  5. 根据数据大小,选择集群大小和实例类型,并据此进行执行器调优。
  6. 检查输入数据是否只是一个压缩文件。如果是,那也可能导致瓶颈。
© www.soinside.com 2019 - 2024. All rights reserved.