合并(1)写入前的数据帧对性能有影响吗?

does coalesce(1) the dataframe before write have any impact on performance?

在我将dataframe写入hdfs之前,我coalesce(1)让它只写一个文件,所以在复制东西时很容易手动处理,从hdfs获取,...

我会这样编码来写输出。

outputData.coalesce(1).write.parquet(outputPath)

(输出数据为 org.apache.spark.sql.DataFrame)

我想问一下它们是否对性能有任何影响而不是合并

outputData.write.parquet(outputPath)

我不建议这样做。分布式计算的全部目的是让数据和处理位于多台机器上,并利用许多机器(工作节点)的 CPU/Memory 的优势。

在您的情况下,您正试图将所有内容放在一个地方。如果要写入只有一个分区的单个文件,为什么需要分布式文件系统?性能可能是一个问题,但只有在您检查 before/after 对分布在集群上多个节点的大量数据上使用 Coalesce 函数后才能对其进行评估。

虽然在处理大量数据时确实不建议使用 coalesce(1) 当 _temporary 中有太多小分区文件并且文件移动需要花费相当多的时间将它们移动到正确的目录。

是的,它会用 1 个工人写。

因此,即使您提供 10 个 CPU 核心,它也将使用 1 个工作线程(单个分区)进行写入。

如果您的文件很大(10 GB 或更多)就会出现问题。但如果你有小文件 (100 mb) 推荐