Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/scala/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/apache-spark/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何合并SPARK data frame创建的文件夹中的所有零件文件,并在scala中重命名为文件夹名_Scala_Apache Spark_Hdfs_Spark Dataframe_Hadoop2 - Fatal编程技术网

如何合并SPARK data frame创建的文件夹中的所有零件文件,并在scala中重命名为文件夹名

如何合并SPARK data frame创建的文件夹中的所有零件文件,并在scala中重命名为文件夹名,scala,apache-spark,hdfs,spark-dataframe,hadoop2,Scala,Apache Spark,Hdfs,Spark Dataframe,Hadoop2,嗨,我有我的spark数据框的输出,它创建文件夹结构并创建零件文件。 现在我必须合并文件夹中的所有零件文件,并将该文件重命名为文件夹路径名 这就是我做分区的方法 df.write.partitionBy("DataPartition","PartitionYear") .format("csv") .option("nullValue", "") .option("header", "true")/ .option("codec", "gzip") .save("hdfs:/

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

这就是我做分区的方法

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
我必须创建这样的最终文件

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压缩,因此合并(1)和重新分区变得非常缓慢

我在这里看到了一个解决方案 但是我不能实现它,请帮助我

重分区抛出错误

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

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

hdfs-dfs-getmerge


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

我认为合并文件的动机是在Spark之外进行处理。在这种情况下,我想说的是,这种方法是在Spark之外合并它们,因为您放弃了数据的分布式特性,这本质上是使用Spark处理数据的原因。为什么必须合并所有文件?将文件拆分为多个部分非常适合使用Spark进行读取。此外,HDFS并不打算保存这样的单个大文件,因此如果要这样做,应该将其保存到集群的头节点。这是一个替代HDFS的选项吗?@Anupam ok-为什么要将它们合并到一个文件中?@DanCiborowski MSFT我必须将这些文件交付给客户端,他们希望这些文件的格式相同..我们至少可以控制每个分区的文件数吗?例如,每个分区5个文件?目前,它为已创建的分区创建了200多个文件甚至1GB文件也有..目前它为甚至有1GB文件的分区创建了200多个,这可能是因为您可能正在运行分组(洗牌)类型的转换。当然,您可以使用
rdd/df.repartition(x)
进行限制。x是您要为rdd/dfI创建的文件数。我有这么多文件夹,大约5K个文件夹……如何重命名这些文件?这是一个与您开始时不同的问题。对于此函数,您提供的是src目录,而不是src文件。