创建Pair RDD
很多存储键值对的数据格式会在读取时直接返回由其键值对数据组成的pair RDD
当需要把一个普通RDD转化而pair RDD时,可以使用map函数
//使用第一个单词作为键创建pair RDD
val pairs = lines.map(x => (x.split(" "))(0), x)
Pair RDD的转化操作
Pair RDD也还是RDD,同样支持RDD所支持的函数
pair.filter(case (key,value) => value.length < 20)
转化操作
聚合操作
计算每个键对应值的平均值
rdd.mapValues(x => (x,1)).reduceByKey((x,y) => (x._1 +y._1, x._2 + y._2))
对所有单词进行计数
val input = sc.textFile("s3://...")
val words = input.flatMap( x => x.split(" "))
val result = words.map(x => (x,1)).reduceByKey((x,y) => x + y)
combineByKey() 是最常用的基于键进行聚合的函数,大多数基于键聚合的函数都是用它实现的
可以让用户返回与输入数据的类型不同的返回值
如果在每个分区中遇到一个新元素,combineByKey