当前位置:   article > 正文

初学Spark 使用Scala编写词频统计_2. 使用scala语言编写词频统计代码(假设文件存储路径为d盘下的word.txt文件)

2. 使用scala语言编写词频统计代码(假设文件存储路径为d盘下的word.txt文件)

大数据技术蓬勃发展,基于开源技术的Hadoop在行业内应用广泛。但Hadoop本身还存在诸多缺陷,最主要的缺陷是其MapReduce计算模型延迟过高,无法胜任实时、快速计算的要求。Spark的诞生弥补了MapReduce的缺陷。

学习Spark的第一天,因为Scala是Spark编程常用的语言之一,所以使用Scala编写了一个词频统计,欢迎各位大神的指正与建议,一起学习一起成长。代码及注释如下:

  1. object WordCount {
  2. import org.apache.spark.rdd.RDD
  3. import org.apache.spark.{SparkConf, SparkContext}
  4. def main(args: Array[String]): Unit = {
  5. //1.创建SparkConf对象,设置appName和Master地址
  6. val sparkconf = new SparkConf().setAppName("wordCount").setMaster("local[2]")
  7. //2.创建SparkContext对象,它是所有任务计算的源头,它会创建DAGScheduler和TaskScheduler
  8. val sparkContext = new SparkContext(sparkconf)
  9. //设置日志级别
  10. //sparkContext.setLogLevel("WARN")
  11. //3.读取数据文件,RDD可以简单的理解为是一个集合,集合中存放的元素是String类型
  12. val data : RDD[String] = sparkContext.textFile("D:\\word\\words.txt")
  13. //4.切分每一行,获取所有的单词
  14. val words :RDD[String] = data.flatMap(_.split(" "))
  15. //5.每个单词记为1,转换为(单词,1)
  16. val wordAndOne :RDD[(String, Int)] = words.map(x =>(x,1))
  17. //6.相同单词汇总,前一个下划线表示累加数据,后一个下划线表示新数据
  18. /*
  19. hello 1
  20. world 1
  21. hello 1 --> hello 2 x 是 2,y是 1
  22. hello 1 --> hello 3
  23. */
  24. //val result: RDD[(String, Int)] = wordAndOne.reduceByKey((x,y)=>x+y)
  25. val result: RDD[(String, Int)] = wordAndOne.reduceByKey(_+_)
  26. //7.收集打印结果数据:从分布式内存中收集计算结果,是一个数组
  27. val finalResult: Array[(String, Int)] = result.collect()
  28. //将定长数组转为不定长数组
  29. println(finalResult.toBuffer)
  30. //8.关闭sparkContext对象
  31. sparkContext.stop()
  32. }
  33. }

本文内容由网友自发贡献,转载请注明出处:【wpsshop博客】
推荐阅读
相关标签
  

闽ICP备14008679号