以键值对集合{(1,2),(3,4),(3,6)}为例
RDD[U,T]注意下面的函数,对应U和T
合并具有相同值的键
rdd.reduceByKey((x,y)=>x+y)
>>(1,2)(3,10)
对具有相同键的值进行分组
rdd.groupByKey()
>> {(1,[2]),(3,[4,6])}
输出为元组
和aggregate()函数相似:
type Ctype=(Int,Int)
val s=rdd.combineByKey(x=>(x,1),(c:Ctype, x)=>(c._1+x,c._2+1),
(c:Ctype,d:Ctype)=>(c._1+d._1,c._2+d._2))
s.foreach(println(_))
>>>
(1,(2,1))
(3,(10,2))
对RDD的每个值T应用一个函数,不改变键。
rdd.mapValues(x => x+1)
>>{(1,3),(3,5),(3,7)}
与mapValues不同的是,传入的函数返回的是迭代器。
rdd.flatMapValues(x=>(x to 5))
>>{(1,2),(3,4),(1,3),(3,5),(1,4),(1,5)}
以两个键值对集合{(1,2),(3,4),(3,6)}和{(3,9)}为例
以RDD[U,T]为初始RDD.
删掉两个rdd里键相同的元素(不管值是否相同,也不管值的类型是否相同)。
rdd.subtractByKey(rdd2)
>>{(1,2)}
合并两个rdd里键相同的元素(不管值是否相同,也不管值的类型是否相同)。
rdd.join(rdd2)
>>{(3,(4,9)),(3,(6,9))}
右外连接操作(不管值是否相同,也不管值的类型是否相同)。
rdd.rightOuterJoin(rdd2)
>>{(3,(Some(4),9)),(3,(Some(6),9))}
左外连接操作(不管值是否相同,也不管值的类型是否相同)。
rdd. leftOuterJoin(rdd2)
>>{(1,(2,None)),(3,(4,Some(9))),(3,(6,Some(9)))}
按键数据分组。
rdd.cogroup(rdd2)
>>(1,(CompactBuffer(2),CompactBuffer()))(3,(CompactBuffer(4, 6),CompactBuffer(9)))
以键值对集合{(1,2),(3,4),(3,6)}为例
RDD[U,T]注意下面的函数,对应U和T
按键来计数。
rdd.countByKey()
>>(1,1),(3,2)
键结果以映射表的形式返回,以便查询。
返回给定的键所对应的所有值。
rdd.lookup(3)
>>4,6