Apache spark 当coalesce=1时加速火花写入?
我有一个Spark作业,它从位置a读入一天的数据,然后写出到位置B。该作业的要点是将许多小文件连接到s3中每个配置单元样式分区的单个文件中。我的代码非常简单,但运行速度非常慢 代码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
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: