在桌面上创建这个data.txt文件,读取为RDD数据,data.txt的文件内容是hadoop is good, my name is chenhongcheng, scala ok ,spark is fast, spark is better,只统计每一行中包含3个单词的,一行中存在单词数不为3的不统计,将相同的单词放在一起,统计单词出现的次数,对计数得到的结果进行排序(由少到多),取出现字数倒数前2的单词及数量进行打印输出给出scala代码
时间: 2024-03-27 19:39:00 浏览: 16
好的,以下是对应的Scala代码:
```scala
import org.apache.spark.{SparkConf, SparkContext}
object WordCount {
def main(args: Array[String]) {
val conf = new SparkConf().setAppName("WordCount").setMaster("local")
val sc = new SparkContext(conf)
val data = sc.textFile("data.txt")
.map(line => line.split(" "))
.filter(words => words.length == 3)
.flatMap(words => words)
.map(word => (word, 1))
.reduceByKey(_ + _)
.sortBy(_._2)
val top2Words = data.take(data.count().toInt - 2)
top2Words.foreach(word => println(word._1 + ": " + word._2))
}
}
```
解释一下代码:
1. 创建SparkConf和SparkContext对象;
2. 读取data.txt文件内容为RDD数据;
3. 对每一行的单词进行筛选,只统计每一行中包含3个单词的;
4. 将单词扁平化,以便于后续统计单词出现次数;
5. 统计单词出现次数,并按照次数从少到多排序;
6. 取出现字数倒数前2的单词及数量;
7. 打印输出结果。
注意:这里的代码是在本地模式下运行,如果需要在集群上运行,需要修改SparkConf的配置。