Spark WordCount运行原理
1、WordCount执行流程图
2、Spark WordCount代码
//创建SparkContext
val conf = new SparkConf().setAppName("WordCount").setMaster("local[*]")
val sc = new SparkContext(conf)
//读取文件内容,也可以直接读取本地文件
val lines = sc.textFile("hdfs://...")
//词频统计并输出结果
val words = lines.flatMap(x=>x.split(" "))
val pairs = words.map(x=>(x,1))
val wordCounts = pairs.reduceByKey(_+_)
wordCounts.foreach(println)
//以上步骤可简写为:lines.flatMap(x=>x.split(" ")).map(x=>(x,1)).reduceByKey(_+_).foreach(println)
代码解析:
- 创建Spark入口
- 读取文件创建RDD
- 词频统计
- 输出结果
3、WordCount执行步骤
(1)创建Spark
编程入口SparkContext
(2)读取文件,将文件中的内容保存到RDD
(3)将工作分配到各主机节点
(4)各主机节点对自己分到的任务进行操作,首先进行单词划分,按空格分隔,生成flatMappedRDD
(5)然后将各单词生成Map
键值对,输出(Word,1)
(6)然后将不同节点上的单词进行局部统计求和,生成局部WordCount
的MapPatitionRDD
(7)接着对各节点间进行Shuffle
,将各节点间的单词进行词频统计,生成最后的MapPatitionRDD
(8)最后输出结果