如何为我使用 Scala 保存到 S3 的 CSV 文件指定名称

How to specify a name to CSV file that I save to S3 with Scala

当我尝试将 DataFrame 以 CSV 格式保存到 S3 时,创建的文件名称是由 Scala 生成的。例如-

  file.coalesce(1).write.option("header", "true").csv(bucket + "/fileName.csv")

bucket 中创建一个名为 fileName.csv 的目录,其中包含一个名为 part-00000-955faf13-9fc3-4ccc-b0df-fb91cd701901-c000.csv

的文件

如何更改文件名或使用特定名称保存文件?

Spark 的write 方法无法直接控制写入文件的名称。它只能控制目录名,不能控制文件本身。但是可以在处理后更改文件名:

import org.apache.hadoop.fs._
FileSystem.get(sc.hadoopConfiguration).rename(
new Path("dir/oldName.csv/part-0000"), 
new Path("dir/newName.csv"))

这就是保存文件后最终对我有用的方法 -

val src = new Path(s"s3a://$bucketName/$pathToDir")
val fs = src.getFileSystem(sc.hadoopConfiguration)
val status = fs.listStatus(src)
status.foreach(filename => {
  fs.rename(new Path(s"s3a://$bucketName/$pathToDir/${filename.getPath.getName}"),
    new Path(s"s3a://$bucketName/$pathToDir/$newFileName"))
})