FaltMap算子与Map算子的区别:
一、什么时候使用FlatMap 当数据是一条数据对应多条数据的时候使用
二、flatMap内的函数返回值必须是一个scala类型的集合才行
三、Map内的函数返回值是一个对象
聚合操作:
例子一:
使用reduceByKey,和mapValues计算每个键对应的平均值
val rdd = sc.parallelize(Seq(("panda", 0), ("pink", 3), ("pirate", 3), ("panda", 1),("pink",4)))
rdd.mapValues(x=>{(x,1)}).reduceByKey{case(x,y)=>(x._1+y._1,x._2+y._2)}.foreach(println)
(panda,(0,1))(pink,(3,1))
...
此时的x._1+y._1对应的是(key,(value1,value2))中的value1
此时的x._2+y._2对应的是(key,(value1,value2))中的value2
输出结果:(panda,(1,2)),(pink,(7,2)),(pirate,(3,1))
例子二:
实现单词的计数
val input = sc.textFile("")
val words = input.flatMap(x => {
x.split(" ")
})
words.map(x => (x, 1)).reduceByKey((x, y) => x + y)