You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Spark Scala实现Twitter提及量Top2提取(单条推文去重)

解决Spark提取Twitter提及Top2的方案

嘿,作为Spark新手你已经开了个好头!我来帮你补全代码,完美实现单条推文同一提及仅统计一次、提取Top2的需求,咱们一步步来:

完整代码实现

val tweets = sc.textFile("test.txt") // 注意你之前写的是testFile,应该对应你的test.txt文件哦
val myReg = """(?<=@)([\w]+)""".r

// 1. 处理每条推文:提取所有提及并去重(单条内重复提及只算1次)
val uniqueMentionsPerTweet = tweets.flatMap { tweet =>
  // 用正则匹配所有@后的内容,转成Set自动去重,再转回可迭代对象
  myReg.findAllIn(tweet).toSet
}

// 2. 转换为键值对并统计总次数
val mentionCounts = uniqueMentionsPerTweet
  .map(mention => (s"@$mention", 1)) // 把正则提取的内容补回@,变成完整提及格式
  .reduceByKey(_ + _) // 按提及分组,累加次数

// 3. 按次数降序排序,取Top2
val top2Mentions = mentionCounts.sortBy(_._2, ascending = false).take(2)

// 4. 按你期望的格式输出结果
top2Mentions.foreach { case (mention, count) =>
  println(s"($count, $mention)")
}

关键步骤解释

  • 单条推文去重:用toSet处理每条推文的匹配结果,Set会自动剔除重复的提及,刚好满足你“单条推文中同一提及仅统计一次”的规则。
  • 补回@符号:你的正则是提取@后面的内容(比如Kelsey),所以用s"@$mention"把@加回去,和你期望的输出格式一致。
  • 统计与排序:reduceByKey高效统计每个提及的总次数,sortBy(_._2, ascending = false)按次数从高到低排序,take(2)直接取前两名。

测试验证

用你给出的测试文本运行代码,会输出:

(2, @harvard)
(1, @Kelsey)

完全符合你的期望!

内容的提问来源于stack exchange,提问作者Ragnall_Mac_Somairle

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.26 08:46:12