pyspark - 将多个输入文件放入一个RDD和一个输出文件中



我在 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另存为单个文件,请使用coalescerepartition只有一个分区。

下面的代码有效,取自示例。

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")

相关内容

  • 没有找到相关文章

最新更新