Apache spark S3上带有美元符号的垃圾火花输出文件
我有一个简单的spark任务,从s3读取一个文件,取五个,然后在s3中写回。 我看到的是,在s3中,在我的输出“目录”旁边总是有一个额外的文件,它被称为output_$folder$ 这是什么?如何防止spark创建它? 下面是一些代码来显示我正在做什么Apache spark S3上带有美元符号的垃圾火花输出文件,apache-spark,amazon-s3,pyspark,Apache Spark,Amazon S3,Pyspark,我有一个简单的spark任务,从s3读取一个文件,取五个,然后在s3中写回。 我看到的是,在s3中,在我的输出“目录”旁边总是有一个额外的文件,它被称为output_$folder$ 这是什么?如何防止spark创建它? 下面是一些代码来显示我正在做什么 x = spark.sparkContext.textFile("s3n://.../0000_part_00") five = x.take(5) five = spark.sparkContext.parallelize(five) fiv
x = spark.sparkContext.textFile("s3n://.../0000_part_00")
five = x.take(5)
five = spark.sparkContext.parallelize(five)
five.repartition(1).saveAsTextFile("s3n://prod.casumo.stu/dimensions/output/")
作业完成后,我有一个名为output的s3“目录”,其中包含结果和另一个名为output_$folder$的s3对象,我不知道它是什么。好的,看来我找到了它是什么。 它是一种标记文件,可能用于确定S3目录对象是否存在。 我是如何得出这个结论的? 首先,我找到了这个链接,它显示了
org.apache.hadoop.fs.s3native.NativeS3FileSystem#mkdir
方法:
然后我搜索了其他源代码库,看看是否会找到该方法的不同版本。我没有
最后,我做了一个实验,在删除了s3输出目录对象但保留了output_$folder$文件后,重新运行了相同的spark作业。作业失败,说明输出目录已存在
我的结论是,这是hadoop知道s3中是否有一个同名目录的方法,我不得不接受它
当我从本地的开发机器(即笔记本电脑)运行作业时,上述所有情况都会发生。如果我从aws数据管道运行相同的作业,则不会创建输出文件夹$。将应用程序中的S3路径从
S3://
更改为s3a://
,这似乎对我起到了作用。自从我开始使用s3a://
以来,不再创建$folder$
文件