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

如何在SPARK数据帧创建的文件夹中合并所有零件文件,并在scala中重命名为文件夹名称

夹谷和裕
2023-03-14

嗨,我有我的火花数据帧的输出,它创建文件夹结构并创建零件文件。现在我必须合并文件夹内的所有零件文件并将该文件重命名为文件夹路径名。

这就是我做分区的方式

df.write.partitionBy("DataPartition","PartitionYear")
  .format("csv")
  .option("nullValue", "")
  .option("header", "true")/
  .option("codec", "gzip")
  .save("hdfs:///user/zeppelin/FinancialLineItem/output")

它创建如下文件夹结构

hdfs:///user/zeppelin/FinancialLineItem/output/DataPartition=Japan/PartitionYear=1971/part-00001-87a61115-92c9-4926-a803-b46315e55a08.c000.csv.gz
hdfs:///user/zeppelin/FinancialLineItem/output/DataPartition=Japan/PartitionYear=1971/part-00002-87a61115-92c9-4926-a803-b46315e55a08.c001.csv.gz

我必须创建这样的最终文件

hdfs:///user/zeppelin/FinancialLineItem/output/Japan.1971.currenttime.csv.gz

此处没有零件文件bith 001和002合并为两个一个。

我的数据大小非常大300 GB gzip和35 GB zip,因此合并(1)和重新分区变得非常慢。

我在这里看到了一个使用spark CSV编写单个CSV文件的解决方案,但我无法实现它,请帮助我。

重新分区抛出错误

error: value repartition is not a member of org.apache.spark.sql.DataFrameWriter[org.apache.spark.sql.Row]
       dfMainOutputFinalWithoutNull.write.repartition("DataPartition","StatementTypeCode")

共有1个答案

仲孙鸣
2023-03-14

从Spark外部的头部节点尝试此操作。。。

hdfs dfs-getmerge

https://hadoop.apache.org/docs/r1.2.1/file_system_shell.html#getmerge

"将源目录和目标文件作为输入,并将src中的文件连接到目标本地文件中。可选地,可以设置addnl以允许在每个文件的末尾添加换行符。"

 类似资料:
  • 这个问题是本文的后续内容:Python-根据子文件夹和文件名重命名子文件夹中的文件。 我正在尝试遍历中子文件夹中的文件,并以指定的方式重命名每个文件。以下是我目前掌握的代码: 当我运行该行时,,它正确地显示保存在中的名为的文件将被重命名为。 但是,os.rename命令返回以下错误: "必须是字符串,而不是列表。" 这似乎是由于我在os.rename命令中使用了“文件名”。据我所知,os.rena

  • 我将spark数据帧输出保存为带有分区的scala中的csv文件。我在齐柏林飞艇上就是这样做的。 现在文件保存在预期的分区文件夹结构中。 现在,我的要求是重命名所有零件文件并将其保存在一个目录中。文件名将作为文件夹结构的名称。 例如,我有一个文件保存在文件夹/数据分区=日本/分区年=1971/part-00001-87a61115-92c9-4926-a803-b46315e55a08.c000.

  • 问题内容: 我有一个包含文件夹结构的zip文件,例如 主文件夹/ subFolder1 / subFolder2 / subFolder3 / 文件3.1 文件3.2 我想使用Java 重命名文件夹,例如在该zip文件中。 有没有比提取整个zip文件并使用新的文件夹名称重新创建一个新的方法更简单的方法? 问题答案: Zip是一种存档格式,因此变异通常涉及重写文件。 zip的某些特殊功能也会受阻(z

  • 问题内容: 我必须递归重命名完整的文件夹树,以便任何地方都没有大写字母(这是C ++源代码,但这无关紧要)。 忽略CVS和Subversion版本控制文件/文件夹的加分点。首选方法是shell脚本,因为shell应该在任何Linux机器上都可用。 关于文件重命名的细节,有一些有效的论据。 我认为小写相同的文件应被覆盖;这是用户的问题。在忽略大小写的文件系统上签出时,它也会用后者覆盖第一个文件系统。

  • 问题内容: 我需要使用文件夹中文件的所有名称创建一个列表。 例如,如果我有: 我想将它们存储为 with 作为值。 用Java做到最好的方法是什么? PS:我在Mac OS X上 问题答案: 你可以这样做: 你只想获取JPEG文件还是所有文件?