Apache spark 当coalesce=1时加速火花写入?

Apache spark 当coalesce=1时加速火花写入?,apache-spark,parquet,Apache Spark,Parquet,我有一个Spark作业,它从位置a读入一天的数据,然后写出到位置B。该作业的要点是将许多小文件连接到s3中每个配置单元样式分区的单个文件中。我的代码非常简单,但运行速度非常慢 代码 df = spark.read.parquet('s3://location/A/') (df .coalesce(1) .write .mode('overwrite') .partitionBy('date', 'user_id') .parquet('s3://loca

我有一个Spark作业,它从位置a读入一天的数据,然后写出到位置B。该作业的要点是将许多小文件连接到s3中每个配置单元样式分区的单个文件中。我的代码非常简单,但运行速度非常慢

代码

df = spark.read.parquet('s3://location/A/')

(df
    .coalesce(1)
    .write
    .mode('overwrite')
    .partitionBy('date', 'user_id')
    .parquet('s3://location/B/'))
Spark提交

spark-submit \
    --master spark://foobar \
    --deploy-mode cluster \
    --conf spark.dynamicAllocation.enabled=true \
    --conf spark.shuffle.service.enabled=true \
    --conf spark.dynamicAllocation.minExecutors=1 \
    --conf spark.dynamicAllocation.maxExecutors=18 \
    --conf spark.dynamicAllocation.initialExecutors=4 \
    --conf spark.executor.memory=4G \
    --conf spark.executor.cores=4 \
    --conf spark.driver.memory=2G \
    --conf spark.shuffle.io.preferDirectBufs=false \
    --conf spark.executor.heartbeatInterval=10000000 \
    --conf spark.network.timeout=10000000

我可以做什么样的配置使它运行得更快,或者coalesce(1)总是非常慢?

由@Explorer发布的链接可能会有所帮助。在数据帧上尝试重新分区(1),因为它相当于合并(1,shuffle=True)。
请注意,如果您的输出结果相当大,由于shuffle的剧烈网络IO,作业也将非常缓慢。

您是否看过帖子:@Explorer我认为您无法在数据帧写入程序合并上执行shuffle=True: