当前位置: 首页 > 知识库问答 >
问题:

Spark仅保存(写入)拼花地板一个文件

陈修诚
2023-03-14

如果我写信

dataFrame.write.format("parquet").mode("append").save("temp.parquet")

临时工。拼花文件夹我得到了和行号相同的文件号

我想我不太了解拼花地板,但它是自然的吗?

共有3个答案

沈凡
2023-03-14

虽然前面的答案是正确的,但你必须理解重新分区或合并到单个分区后的重新聚焦。您的所有数据都必须传输到单个工作人员,以便立即将其写入单个文件。

正如互联网上反复提到的那样,尽管执行计划中添加了洗牌步骤,但在这种情况下,您应该使用重新分区。这一步有助于使用集群的功能,而不是按顺序合并文件。

至少有一个替代方案值得一提。您可以编写一个简单的脚本,将所有文件合并到一个文件中。这样,您将避免向集群的单个节点产生大量流量。

段宏毅
2023-03-14

您可以将分区设置为1以保存为单个文件

dataFrame.repartition(1).write.format("parquet").mode("append").save("temp.parquet")
甄志
2023-03-14

在写操作之前使用合并

数据帧。合并(1)。写格式(“拼花”)。模式(“附加”)。保存(“临时拼花”)

编辑-1

仔细观察,文档确实警告了合并

但是,如果您正在进行剧烈合并,例如to numPartitions=1,这可能会导致您的计算在较少的节点上进行(例如,在numPartitions=1的情况下为一个节点)

因此,正如@Amar所建议的,最好使用重新分区

 类似资料:
  • 我试图利用火花分区。我试图做这样的事情 这里的问题每个分区都会创建大量的镶木地板文件,如果我尝试从根目录读取,则会导致读取缓慢。 为了避免这种情况,我试过 但是,这将创建每个分区中镶木地板文件的数目。现在我的分区大小不同了。因此,理想情况下,我希望每个分区都有单独的合并。然而,这看起来并不容易。我需要访问所有分区合并到一定数量并存储在单独的位置。 我应该如何使用分区来避免写入后出现许多文件?

  • 我是Spark的初学者,试图理解Spark数据帧的机制。当从csv和parquet加载数据时,我比较了spark sql dataframe上sql查询的性能。我的理解是,一旦数据加载到spark数据框中,数据的来源(csv或parquet)应该无关紧要。然而,我看到了两者之间的显著性能差异。我使用以下命令加载数据,并对其编写查询。 请解释差异的原因。

  • 我试图做一些非常简单的事情,我有一些非常愚蠢的挣扎。我想这一定与对火花的基本误解有关。我非常感谢任何帮助或解释。 我有一张非常大的桌子(~3 TB,~300毫米行,25k个分区),在s3中保存为拼花地板,我想给一些人一个很小的拼花文件样本。不幸的是,这要花很长时间才能完成,我不明白为什么。我尝试了以下方法: 然后当这不起作用时,我尝试了这个,我认为应该是一样的,但我不确定。(我添加了,以尝试调试。

  • 我将火花数据框保存为拼花文件,数据框具有从avro对象构建的行。相同的确切代码在这里-https://stackoverflow.com/a/41491999/2440775 我面临的挑战是,我希望能够在传入数据中缺少整数字段时具有空值。Avro似乎允许使用Union类型,但当我不指定默认值或在avsc中指定默认值为"null"时,我会得到以下错误: 如果我写一个默认值“0”,那么it saveA

  • Spark版本:2.3 hadoop dist:azure Hdinsight 2.6.5平台:azure存储:BLOB 集群中的节点:6个执行器实例:每个执行器6个内核:每个执行器3个内存:8gb 试图通过同一存储帐户上的spark数据框将azure blob(wasb)中的csv文件(大小4.5g-280列,2.8 mil行)加载到拼花格式。我重新划分了大小不同的文件,即20、40、60、10

  • 我是Spark的新手。我尝试在本地模式(windows)下使用spark java将csv文件保存为parquet。我得到了这个错误。 原因:org.apache.spark.Spark异常:写入行时任务失败 我引用了其他线程并禁用了spark推测 set("spark.speculation "," false ") 我还是会出错。我在csv中只使用了两个专栏进行测试。 输入: 我的代码: 请帮