需求:使用spark统计词频,并求出现次数最多的10个词以及出现次数
问题:用Spark算子top(),求top N的时候结果不准确
我们用一首被初中生唱收费的《That girl》来做测试:
步骤一:使用算子map() 、reduceByKey()、filter()统计词频
def wordcount(): Unit ={ val conf = new SparkConf().setAppName("wordcount").setMaster("local[*]") val sc = new SparkContext(conf) sc.setLogLevel("ERROR") val rdd1 = sc.textFile("song.txt") val sortWord = rdd1.flatMap(_.split(" ")) .map(x => (x,1)) .reduceByKey((v1,v2) => v1 + v2) .filter(x => x._1 != "") .foreach(println) sc.stop() }
输出:
步骤二:根据词频倒序排序
注意:sortBy(x => x._2,false,1),需要设置分区数为1,不然会在不同的分区内排序
def wordcount(): Unit ={
val conf = new SparkConf().setAppName("wordcount").setMaster("local[*]")
val sc = new SparkContext(conf)
sc.setLogLevel(