我在Python中有一个wordcount,我希望在Spark上运行多个文本文件并获得一个输出文件,因此这些单词在所有文件中都被计算在内。我尝试了一些解决方案,例如找到here和here的解决方案,但它仍然提供与输入文件数相同数量的输出文件。
rdd = sc.textFile("file:///path/*.txt")
input = sc.textFile(join(rdd))
或
rdd = sc.textFile("file:///path/f0.txt,file:///path/f1.txt,...")
rdds = Seq(rdd)
input = sc.textFile(','.join(rdds))
或
rdd = sc.textFile("file:///path/*.txt")
input = sc.union(rdd)
不能工作。任何人都可以建议如何制作一些输入文本文件的RDD?
提前致谢...
答案 0 :(得分:8)
这应该加载与模式匹配的所有文件。
rdd = sc.textFile("file:///path/*.txt")
现在,您不需要进行任何联合。你只有一个RDD。
来到你的问题 - why are you getting many output files
。输出文件的数量取决于partitions
中RDD
的数量。当您运行字数统计逻辑时,您生成的RDD可以有多个分区。如果要将RDD保存为单个文件,请使用coalesce
或repartition
只有一个分区。
以下代码适用于Examples。
rdd = sc.textFile("file:///path/*.txt")
counts = rdd.flatMap(lambda line: line.split(" ")) \
... .map(lambda word: (word, 1)) \
... .reduceByKey(lambda a, b: a + b)
counts.coalesce(1).saveAsTextFile("res.csv")