在将数据帧写入hdfs之前,我coalesce(1)
使其仅写入一个文件,因此在复制事物时(从hdfs获取...)很容易手动处理事物。
我会像这样编写输出代码。
outputData.coalesce(1).write.parquet(outputPath)
(outputData是org.apache.spark.sql.DataFrame)
我想问一下它们是否对性能有影响而不是没有结合
outputData.write.parquet(outputPath)
答案 0 :(得分:1)
是的,它将用 1 个工人编写。
所以,即使你给了 10 个 CPU 核心,它也会用 1 个工人(单个分区)写入。
如果您的文件非常大(10 GB 或更多),则会出现问题。但如果您有小文件(100 mb),建议您
答案 1 :(得分:0)
我不建议您这样做。分布式计算的全部目的是使数据和处理位于多台计算机上,并利用多台计算机(工作节点)的CPU /内存的优势。
在您的情况下,您尝试将所有内容都放在一个位置。如果要写入只有一个分区的单个文件,为什么需要分布式文件系统?性能可能是一个问题,但是只有在使用Coalesce函数之前/之后检查群集中分布在多个节点上的大量数据之后,才能评估性能。
答案 2 :(得分:0)
尽管在处理海量数据时并没有建议,但是当_temporary中的小分区文件过多并且文件移动将它们移动到正确的目录中时,使用Coalesce(1)会很方便