Spark词频统计:统计文件中各个单词的出现次数,过滤掉含有a的单词,并输出前三名

Spark词频统计

统计文件中各个单词的出现次数,过滤掉含有a的单词,并输出前三名

第一种方法

代码
# 引包
from pyspark import SparkContext
sc = SparkContext()
# 读文件
rdd = sc.textFile("/home/spark/anaconda3/LICENSE.txt")
# 查看数据
# rdd.collect()
# 分词,将每一行字符串拆分为单词,返回一个单词列表
# 使用flatMap而不是map的原因是,flatMap允许每个输入元素生成零个或多个输出元素,而map只能生成一个输出元素。在这种情况下,我们希望将每一行字符串拆分成多个单词,并且每个单词都作为独立的元素进行处理,因此需要使用flatMap函数。
rdd_flatmap = rdd.flatMap(lambda line: line.split(" "))
# 查看
# rdd_flatmap.collect()
# 过滤掉含有a的单词,包含A,并且过滤掉空字符串
# word.strip() != '':这部分条件用于判断单词是否为空字符串。使用 strip() 方法去除单词两端的空格,并与空字符串进行比较。
rdd_filtered= rdd_flatmap.filter(lambda word: 'a' not in word.lower() and word.strip() != '')
# rdd_filtered.collect()
# 将单词列表转换为 (word, 1) 的元组
rdd_map = rdd_filtered.map(lambda word: (word, 1))
# rdd_map.collect()
# 以单词为分组,进行词频统计
rdd_result = rdd_map.groupByKey().mapValues(sum)
# rdd_result.collect()
# 根据单词的出现次数从大到小进行排序
# sortBy 函数默认按升序进行排序,ascending=False指定进行降序排序
rdd_sort = rdd_result.sortBy(lambda words: words[1],ascending=False)
# rdd_sort.collect()
# 读取排序后数据的前三个
rdd_sort.take(3)
结果

第二种方法

代码
# 引包
from pyspark import SparkContext
sc = SparkContext()
# 读文件
file = sc.textFile("/home/spark/anaconda3/LICENSE.txt")
# 分词 flatMap
words = file.flatMap(lambda line:line.split())
# 过滤
# 使用 filter() 方法过滤掉含有字母 'a' 的单词
filtered_words= words.filter(lambda word: 'a' not in word.lower())
# 计数
# 使用 map() 方法将每个单词映射为一个元组 (word, 1),然后使用 reduceByKey() 方法统计每个单词的出现次数。
word_counts = filtered_words.map(lambda word: (word, 1)).reduceByKey(lambda x, y: x + y)
# 分组求和
# 使用 map() 方法将每个出现次数映射为一个元组 (count, [word1, word2, ...]),
# 然后使用 reduceByKey() 方法将相同次数的单词分组求和。
counts_sum= word_counts.map(lambda x: (x[1], [x[0]])).reduceByKey(lambda x, y: x + y)
# 排序输出前三个
top_words = word_counts.takeOrdered(3, key=lambda x: -x[1])
for word, count in top_words:
    print(word, count)
结果

  • 0
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值