使用FileSystem将文件写入S3(Scala)

时间:2019-06-26 21:34:10

标签: scala apache-spark hdfs

我正在使用scala,并尝试写入包含字符串内容的文件, 到S3。 我尝试使用FileSystem做到这一点, 但我得到一个错误: “错误的FS:s3a”

    val content = "blabla"
    val fs = FileSystem.get(spark.sparkContext.hadoopConfiguration)
    val s3Path: Path = new Path("s3a://bucket/ha/fileTest.txt")
    val localPath= new Path("/tmp/fileTest.txt")
    val os = fs.create(localPath)
    os.write(content.getBytes)
    fs.copyFromLocalFile(localPath,s3Path)

我遇到一个错误:

java.lang.IllegalArgumentException: Wrong FS: s3a://...txt, expected: file:///

怎么了?

谢谢!

1 个答案:

答案 0 :(得分:2)

您需要为该方案请求特定的文件系统,然后可以直接在远程系统上创建文本文件。

val s3Path: Path = new Path("s3a://bucket/ha/fileTest.txt")
val fs = s3Path.getFilesystem(spark.sparkContext.hadoopConfiguration)
val os = fs.create(s3Path, true)
os.write("hi".getBytes)
os.close

无需本地编写和上传; s3a连接器将根据需要缓冲并上传