pyspark - 将多个输入文件合并为一个RDD和一个输出文件

pit*_*erd 4 python hadoop mapreduce apache-spark pyspark

我在Python中有一个wordcount,我希望在Spark上运行多个文本文件并获得一个输出文件,所以这些单词在所有文件中都被计算在内.我尝试了一些解决方案,例如这里这里找到的解决方案,但它仍然提供与输入文件数量相同数量的输出文件.

rdd = sc.textFile("file:///path/*.txt")
input = sc.textFile(join(rdd))
Run Code Online (Sandbox Code Playgroud)

要么

rdd = sc.textFile("file:///path/f0.txt,file:///path/f1.txt,...")
rdds = Seq(rdd)
input = sc.textFile(','.join(rdds))
Run Code Online (Sandbox Code Playgroud)

要么

rdd = sc.textFile("file:///path/*.txt")
input = sc.union(rdd)
Run Code Online (Sandbox Code Playgroud)

不工作.任何人都可以建议如何制作一些输入文本文件的RDD?

提前致谢...

Moh*_*itt 9

这应该加载匹配模式的所有文件.

rdd = sc.textFile("file:///path/*.txt")
Run Code Online (Sandbox Code Playgroud)

现在,您不需要进行任何联合.你只有一个RDD.

来你的问题 - why are you getting many output files.输出文件的数量取决于数量partitionsRDD.当您运行字数统计逻辑时,您生成的RDD可以有多个分区.如果要将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")
Run Code Online (Sandbox Code Playgroud)