Scala Spark仅保存(写入)拼花地板一个文件
如果我写Scala Spark仅保存(写入)拼花地板一个文件,scala,apache-spark,parquet,Scala,Apache Spark,Parquet,如果我写 dataFrame.write.format("parquet").mode("append").save("temp.parquet") 在临时拼花文件夹中 我得到了与行号相同的文件号 我想我不太了解拼花地板,但它是自然的吗?您可以将分区设置为1以保存为单个文件 dataFrame.repartition(1).write.format("parquet").mode("append").save("temp.parquet&quo
dataFrame.write.format("parquet").mode("append").save("temp.parquet")
在临时拼花文件夹中
我得到了与行号相同的文件号
我想我不太了解拼花地板,但它是自然的吗?您可以将分区设置为1以保存为单个文件
dataFrame.repartition(1).write.format("parquet").mode("append").save("temp.parquet")
写操作前使用
dataFrame.coalesce(1).write.format(“拼花”).mode(“append”).save(“临时拼花”)
编辑-1 仔细一看,do警告关于
合并
但是,如果您正在进行激烈的合并,例如,合并到numPartitions=
1,这可能会导致计算在较少的节点上进行
超出您喜欢的范围(例如,在numPartitions=1的情况下为一个节点)
因此,最好使用尽管前面的答案是正确的,但您必须理解重新分区或合并到单个分区后出现的重新聚焦。您的所有数据都必须传输到单个工作者,以便立即将其写入单个文件 正如互联网上反复提到的那样,在这种情况下,尽管执行计划中添加了洗牌步骤,但仍应使用
重新分区。此步骤有助于使用群集的功能,而不是顺序合并文件
至少有一种选择值得一提。您可以编写一个简单的脚本,将所有文件合并为一个文件。这样,您将避免向集群的单个节点生成大量网络流量。请注意,重新分区(1)
应该在写入之前出现,因为它是一种方法,而不是我在其他地方读到的联合更有效。我们应该相信谁?虽然合并了,但生成的分区不一定(事实上,不太可能)具有相同的大小。因此,它实际上是在较小的洗牌开销和(几乎)相同大小的分区之间进行权衡。[1] 因此,一般来说,只有在观察到退化时,才最好使用合并
,并退回到重新分区
[2],但是在numPartitions=1
的特殊情况下,文档强调,重新分区
将是一个更好的选择。我指的是洗牌,并一直认为这是最重要的方面,但我接受你的观点,这是我的观点。有意思。谢谢你y2k shubham,蓝色幻影我得到了我想要的!!谢谢你,巴塔约。现在我正在搜索重新分区和合并!!