计算文本行中每个单词出现的频率-Pyspark

Posted

技术标签:

【中文标题】计算文本行中每个单词出现的频率-Pyspark【英文标题】:Count the frequency of each word in a line of a text-Pyspark 【发布时间】:2021-12-31 01:33:45 【问题描述】:

我在 PySpark 中用这个表单创建了一个 rdd:

[(0, ('This', 1)), (0, ('is', 1)), (0, ('the', 1)), (0, ('100th', 1)), (0, ('Etext', 1)), (0, ('file', 1)), (0, ('presented', 1)), (0, ('by', 1)), (0, ('Project', 1)), (0, ('Gutenberg,', 1)), (0, ('and', 1)), (1, ('is', 1)), (1, ('presented', 1)), (1, ('in', 1)), (1, ('cooperation', 1)), (1, ('with', 1)), (1, ('World', 1)), (1, ('Library,', 1)), (1, ('Inc.,', 1)), (1, ('from', 1))]

对于第一个项目this 位于第一个row(0)。我加了1就可以得到频率了。

我找不到解决此问题的方法。使用aggregateByKeyreduceByKey 后我期望的输出是例如:在第0 行,单词This 被使用了1 次等等......

[(0, ('This', 1, 'is', 1, 'the', 1, ...)), ...]

【问题讨论】:

【参考方案1】:

找出每行单词出现的次数并将它们组合在一起:

    映射RDD中的元素,使得行号和单词成为键(即,),(0,('This',1))变成((0,'This'),1)李> 通过对第 1 步中出现的次数求和来减少 RDD 重新映射第 2 步的结果以将行号作为键 ReduceByKey 组合(单词,总行数)的元组
rdd = spark.sparkContext.parallelize([(0, ('a', 1)), (0, ('b', 1)), (0, ('a', 1)), (1, ('a', 1))])

occurences_per_line = rdd.map(lambda x: ((x[0], x[1][0]), x[1][1])).reduceByKey(lambda x, y: x + y)

occurences_per_line.map(lambda x: (x[0][0], (x[0][1], x[1]))).reduceByKey(lambda x, y: x + y).collect()

"""
[(0, ('a', 2, 'b', 1)), (1, ('a', 1))]
"""

【讨论】:

以上是关于计算文本行中每个单词出现的频率-Pyspark的主要内容,如果未能解决你的问题,请参考以下文章

如何计算我的数据中某些特定单词在 hive 中出现的频率?

C语言一个简单的问题:输入一段文本,计算其中每个单词的出现频率:下面是代码

win32api:在文本行中合并位图

如何将文本行转换为有意义的单词[重复]

导入文本查询字母单词个数

如何有效地计算文档流中的文档之间的相似性