我对这个问题做了很多研究,但没有找到令人满意的答案。我必须重命名来自 spark 的输出文件。
目前我在 S3 中输出我的 spark 数据帧,然后我再次读取它,然后重命名并再次复制。问题是我的 spark 工作需要 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 运行时间更长,并且再次复制数据需要额外费用。