我使用以下Scala代码在S3中使用AWS EMR上的Apache Spark创建文本文件。使用EMR上的Spark写入S3中的文件
def createS3OutputFile() {
val conf = new SparkConf().setAppName("Spark Pi")
val spark = new SparkContext(conf)
// use s3n !
val outputFileUri = s"s3n://$s3Bucket/emr-output/test-3.txt"
val arr = Array("hello", "World", "!")
val rdd = spark.parallelize(arr)
rdd.saveAsTextFile(outputFileUri)
spark.stop()
}
def main(args: Array[String]): Unit = {
createS3OutputFile()
}
我创建一个胖JAR并将其上传到S3。然后我SSH到集群主设备和运行的代码:
spark-submit \
--deploy-mode cluster \
--class "$class_name" \
"s3://$s3_bucket/$app_s3_key"
我看到这个在S3控制台:不是文件有文件夹。
每个文件夹(例如测试3.txt)包含的块的文件的长列表。如下图:
我如何输出一个简单的文本文件,以S3作为我的星火作业的输出?
我是新来斯卡拉和火花。从Spark工作中获得结果的“规范”方式是什么?它是否以我的方式写入文件?它是否使用本机Java函数创建文件? – BlackSheep
@BlackSheep真的取决于手头的任务,真的没有官方的方式。至于创建文件,每个RDD分区都会执行您告诉它执行的任务,因此在这种情况下,每个RDD分区将创建一个文件并写入其自己的文件。 – TheM00s3
这仍然会产生文件夹结构,但只有一个孩子'part-00000'。 – Tim