如果我写
dataFrame.write.format("parquet").mode("append").save("temp.parquet")
在temp.parquet文件夹中 我得到的文件编号与行号
我认为我对镶木地板不是很了解,但这很自然吗?
答案 0 :(得分:2)
在写入操作之前使用coalesce
dataFrame.coalesce(1).write.format("parquet").mode("append").save("temp.parquet")
EDIT-1
仔细观察,docs会警告coalesce
但是,如果您要进行剧烈的合并,例如到numPartitions = 1,这可能导致您的计算在更少的节点上进行 超过您的期望(例如,在numPartitions = 1的情况下为一个节点)
因此,作为suggested by @Amar,最好使用repartition
答案 1 :(得分:2)
尽管先前的答案是正确的,但您必须了解重新分区或合并到单个分区后产生的影响。您必须将所有数据传输到单个工作程序中,以便立即将其写入单个文件中。
正如在互联网上反复提到的那样,尽管在执行方案中增加了改组步骤,但在这种情况下仍应使用repartition
。此步骤有助于使用群集的功能,而不是按顺序合并文件。
至少值得一提。您可以编写一个简单的脚本,将所有文件合并为一个脚本。这样一来,您就可以避免对群集的单个节点产生大量的网络流量。
答案 2 :(得分:1)
您可以将分区设置为1以保存为单个文件
dataFrame.write.repartitions(1).format("parquet").mode("append").save("temp.parquet")