编写WordCount词频统计案例
在Linux本地系统的/export/data目录下,有一个test.txt文件,文件里面有多行文本,每行文本都是由2个单词构成,并且单词之间都是用空格分隔。现在,我们需要通过RDD统计每个单词出现的次数(即词频),具体操作过程如图1所示。
图1 词频统计的操作
在图1中,Spark通过输入算子的操作读取文件来创建RDD,然后通过转换算子和行动算子操作将文件中的所有单词进行了词频统计。接下来,通过代码来进行演示,具体代码如下:
scala> val lines = sc.textFile("file:///export/data/test.txt")
lines: org.apache.spark.rdd.RDD[String] = [file:///export/data/test.txt](file:///\\export\data\test.txt)
MapPartitionsRDD[8] at textFile at <console>:24
scala> val words=lines.flatMap(line=>line.split(" "))
words: org.apache.spark.rdd.RDD[String] = MapPartitionsRDD[20] at flatMap
at <console>:25
scala> val wordAndOne = words.map(word=>(word,1))
wordAndOne: org.apache.spark.rdd.RDD[(String, Int)] = MapPartitionsRDD[21]
at map at <console>:25
scala> val wordCount = wordAndOne.reduceByKey((a,b)=>a+b)
wordCount: org.apache.spark.rdd.RDD[(String, Int)] = ShuffledRDD[22] at
reduceByKey at <console>:25
scala> wordCount.foreach(println)
(spark,3)
(hadoop,2)
(scala,1)
(itcast,3)
(heima,1)
上述代码中,执行wordCount.foreach(println)操作后返回的结果是(spark,3)、(hadoop,2)、(scala,1)、(itcast,3)、(heima,1),说明文件test.txt的文本内容已经实现了词频统计。