Pyspark,在由字符串数组组成的 RDD 中执行字数统计。
Pyspark, perform word count in an RDD comprised of arrays of strings.
我有一个巨大的维基百科文章文本文件,文件的每一行都是一篇文章。我正在尝试创建一个由字符串数组组成的 RDD,每个数组将代表一行文本文件(一篇完整的文章)然后我想计算每个数组的词频所以最后我将有:
[[article1 词频元组],[article2 词频元组],...]
我创建了 RDD:
corpus = sc.textFile("articles.txt")
然后我做一个平面图来分割不同的字符串数组
docs = corpus.flatMap(lambda doc: [doc.split(' ')])
如果我尝试做第二个 Map 以这样创建词值对 ("word",1):
docs.map(lambda word: (word,1))
我得到一个文章值对,如果我想统计语料库中的文章数量,这将很有帮助,我如何计算每篇文章中的单词数?
我想通过引用 RDD 中的每个数组并每次对这个特定数组执行 reduce,我尝试了
docs.map(lambda word: (word[0],1)))
但这只是获取每个数组的第一个字符串。任何建议都非常受欢迎!非常感谢!!!
一种实现你想要的方法是从 flatMap
:
中删除封闭列表
from operator import add
docs = corpus.flatMap(lambda doc: doc.split(' '))
docs.map(lambda word: (word,1)).reduceByKey(add)
您也可以flatMap
直接配对:
corpus.flatMap(lambda doc: [(x, 1) for x in doc.split(' ')]).reduceByKey(add)
或使用 Counter
发出部分聚合:
from collections import Counter
corpus.flatMap(lambda doc: Counter(doc.split(' ')).items()).reduceByKey(add)
我有一个巨大的维基百科文章文本文件,文件的每一行都是一篇文章。我正在尝试创建一个由字符串数组组成的 RDD,每个数组将代表一行文本文件(一篇完整的文章)然后我想计算每个数组的词频所以最后我将有:
[[article1 词频元组],[article2 词频元组],...]
我创建了 RDD:
corpus = sc.textFile("articles.txt")
然后我做一个平面图来分割不同的字符串数组
docs = corpus.flatMap(lambda doc: [doc.split(' ')])
如果我尝试做第二个 Map 以这样创建词值对 ("word",1):
docs.map(lambda word: (word,1))
我得到一个文章值对,如果我想统计语料库中的文章数量,这将很有帮助,我如何计算每篇文章中的单词数?
我想通过引用 RDD 中的每个数组并每次对这个特定数组执行 reduce,我尝试了
docs.map(lambda word: (word[0],1)))
但这只是获取每个数组的第一个字符串。任何建议都非常受欢迎!非常感谢!!!
一种实现你想要的方法是从 flatMap
:
from operator import add
docs = corpus.flatMap(lambda doc: doc.split(' '))
docs.map(lambda word: (word,1)).reduceByKey(add)
您也可以flatMap
直接配对:
corpus.flatMap(lambda doc: [(x, 1) for x in doc.split(' ')]).reduceByKey(add)
或使用 Counter
发出部分聚合:
from collections import Counter
corpus.flatMap(lambda doc: Counter(doc.split(' ')).items()).reduceByKey(add)