我在 Python 中有一个字数统计,我想在 Spark 上运行多个文本文件并获取一个输出文件,因此单词完全计入所有文件。我尝试了一些解决方案,例如在这里和这里找到的解决方案,但它仍然提供与输入文件数量相同数量的输出文件。
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?
提前感谢...
这应该加载与模式匹配的所有文件。
rdd = sc.textFile("file:///path/*.txt")
现在,你不需要做任何工会。您只有一个 RDD。
来到你的问题 - why are you getting many output files
.输出文件的数量取决于RDD
中的partitions
数量。运行字数统计逻辑时,生成的 RDD 可以具有 1 个以上的分区。如果要将RDD另存为单个文件,请使用coalesce
或repartition
只有一个分区。
下面的代码有效,取自示例。
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")