如何在scala中的spark输出文件中添加partitionBy列名作为前缀

时间:2018-03-12 15:56:50

标签: scala apache-spark spark-dataframe hadoop2 multipleoutputs

我已经为这个问题做了很多研究,没有找到令人满意的答案。 我必须重命名我的输出文件来自火花。

目前我在S3中输出我的火花数据帧,然后我再次读取它,然后重命名并再次复制。 这个问题是我的火花工作需要16分钟才能完成,但是从S3读取然后在S3再次重命名和写入需要15分钟。

有什么方法可以重命名我的输出文件..我可以使用part-00000

这是我保存数据框的方式

dfMainOutputFinalWithoutNull.repartition(50).write.partitionBy("DataPartition", "PartitionYear")
      .format("csv")
      .option("timestampFormat", "yyyy/MM/dd HH:mm:ss ZZ")
      .option("nullValue", "")
      .option("delimiter", "\t")
      .option("quote", "\u0000")
      .option("header", "true")
      .option("codec", "bzip2")
      .save(outputFileURL)

在这种情况下,如何使用hadoop文件格式?

目前我正在执行此操作,如下所示

val finalFileName = finalPrefix + DataPartitionName + "." + YearPartition + "." + intFileCounter + "." + fileVersion + currentTime + fileExtention
      val dest = new Path(mainFileURL + "/" + finalFileName)
      fs.rename(urlStatus.getPath, dest)

问题是我有50GB的输出数据并且它创建了非常庞大的文件,重命名这么多文件需要很长时间。

成本方面也很昂贵,因为我的EMR运行时间更长,再次复制数据需要额外费用。

0 个答案:

没有答案