如何为我使用 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"))
})
当我尝试将 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"))
})