Spark写Parquet到S3最后一项任务需要永远

use*_*514 8 apache-spark parquet apache-spark-sql

我正在写一个从DataFrame到S3的镶木地板文件.当我查看Spark UI时,我可以看到所有任务,但1完成了写作阶段(例如199/200).最后一项任务似乎需要永远完成,并且通常由于超出执行程序内存限制而失败.

我想知道最后一项任务发生了什么.如何优化呢?谢谢.

bco*_*a12 7

我已经尝试过Glemmie Helles Sindholt解决方案并且效果很好。这是代码:

path = 's3://...'
n = 2 # number of repartitions, try 2 to test
spark_df = spark_df.repartition(n)
spark_df.write.mode("overwrite").parquet(path)
Run Code Online (Sandbox Code Playgroud)

  • 通常我会将其标记为“谢谢”类型的答案,可以将其删除......但 Glemmie 的答案实际上并不包含任何代码。所以这提供了一个很好的例子,在我看来这是一个积极的贡献。感谢伯纳多的贡献!:) (2认同)

Gle*_*olt 5

听起来你有数据倾斜。您可以通过调用解决这个问题repartition上你DataFrame之前书面S3。