写入之前合并(1)数据帧是否会对性能产生影响?

时间:2018-11-19 04:31:09

标签: apache-spark dataframe hdfs parquet

在将数据帧写入hdfs之前,我coalesce(1)使其仅写入一个文件,因此在复制事物时(从hdfs获取...)很容易手动处理事物。

我会像这样编写输出代码。

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

(outputData是org.apache.spark.sql.DataFrame)

我想问一下它们是否对性能有影响而不是没有结合

outputData.write.parquet(outputPath)

3 个答案:

答案 0 :(得分:1)

是的,它将用 1 个工人编写。

所以,即使你给了 10 个 CPU 核心,它也会用 1 个工人(单个分区)写入。

如果您的文件非常大(10 GB 或更多),则会出现问题。但如果您有小文件(100 mb),建议您

答案 1 :(得分:0)

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

在您的情况下,您尝试将所有内容都放在一个位置。如果要写入只有一个分区的单个文件,为什么需要分布式文件系统?性能可能是一个问题,但是只有在使用Coalesce函数之前/之后检查群集中分布在多个节点上的大量数据之后,才能评估性能。

答案 2 :(得分:0)

尽管在处理海量数据时并没有建议,但是当_temporary中的小分区文件过多并且文件移动将它们移动到正确的目录中时,使用Coalesce(1)会很方便