我有一个包含顶点id的RDD,它的x,y坐标,我想将其内容写入文本文件,在我的本地机器上我正在使用函数
def printVertices(iterable: Iterable[Vertex], filename: String): Unit = {
val pw = new PrintWriter(new File(filename))
for (point <- iterable) {
pw.write(point.id + ", " + point.coordinate.x + ", " + point.coordinate.y + "\n")
}
pw.close()
}
printVertices(dt.points.collect, s"$output/points$id.txt")
在上面的代码中,dt.points是一个RDD,我想将它保存到文本文件中,如果我执行RDD.saveAsTextFile它会写入整个RDD,所以我想使用我的方法并写入s3。
答案 0 :(得分:0)
要在S3上编写RDD(作为文本文件),只需将s3a
添加到URI即可。像这样:
printVertices(dt.points.collect, s"s3a://$bucketName/$output/points$id.txt")
此外,如果您使用Spark 2.2 +
,则必须包含以下JARhadoop-aws-2.7.3.jar
和aws-java-sdk-1.7.4.jar
答案 1 :(得分:0)
您可以考虑使用seratch / AWScala库以及使用它的方式(通过他们的文档)
import awscala._, s3._
implicit val s3 = S3.at(Region.Tokyo)
val buckets: Seq[Bucket] = s3.buckets
val bucket: Bucket = s3.createBucket("unique-name-xxx")
val summaries: Seq[S3ObjectSummary] = bucket.objectSummaries
bucket.put("sample.txt", new java.io.File("sample.txt"))
所以在你的情况下,你需要先获得桶
val bucket: Bucket = s3.bucket("your bucket unique name").get
并将文件放入存储桶
bucket.put(s"$output/points$id.txt", new java.io.File("s"$output/points$id.txt""))