键值对RDD是Spark中许多操作所需要的常见数据类型。通常用来进行聚合运算。
键值对即所谓的 key-value 形式的数据,比如 ('name','Lucy') name 是 key , Lucy 是value。
创建pair rdd 通常是用map
pairs = lines.map(lambda x:(x.split()[0],x)) #创建pair rdd ,key 为 x.split()[0]
Pair Rdd 的转化操作如下(以键值对集合{(1,2),(3,4),(3,6)} 为例)
reduceByKey(func) #合并具有相同键的值,注意是转换操作,reduce是行动操作
rdd.reduceByKey(lambda x,y:x+y) #{(1,2),(3,10)}
groupByKey() #对相同的键的值进行分组
rdd.groupByKey() #{(1,[2]),(3,[4,6])}
combineByKey(createCombiner,mergeValue,mergeCombiners) #使用不同的返回类型合并具有相同键的值
rdd.combineByKey((lambda x:[x]),(lambda x,y:x+[y]),(lambda x,y:x+y)) #等同rdd.groupByKey ,但效率更高,后面介绍原因
#aggregateByKey 同 combineByKey 需要提供初始值
mapValues(func) #对pair RDD中的每个值应用
rdd.mapValues(lambda x:x+1) #{(1,3),(3,5),(3,7)}
flatMapValues(func) #同上面一样,只不过会扁平化 ,类似 flatMap 和 map 的区别
keys() #返回键 rdd.keys() {1,3,3}
values() #返回值 rdd.values() {2,4,6}
sortByKey() #根据键值排序 rdd.sortByKey() {(1,2),(3,4),(3,6)}