摘要
关于spark一些概念的知识见另外一篇博文,这一篇章之说一些算子。
一:join 会进行shuffer
join 用于将<k,v>键值对的算子进行连接操作,最后生成两个rdd算子共同拥有key的数据结构。
方法的定义:def join[W](other: RDD[ (K,V)] ):RDD[ (K , (V1,V2) ) ]
val thisRDD=sc.makeRDD( Array(("A","1"), ("A","2"),("B","2"),("B","4")("C","6") ) )
val otherRDD=sc.makeRDD( Array(("A","2"), ("A","8"),("B","5") )
thisRDD.join(otherRDD).collect.foreach(println)
(A,(1,2))
(A,(1,8))
(A,(3,2))
(A,(3,8))
(B,(2,5))
(B,(4,5))
根据上面的结果可以知道,join之后的结果会去掉不相交的key , (C,6)这条数据被无情抛弃。
二:union 不会进行shuffer
返回两个rdd的并集,如果集合中有重复的元素则不会进行去重,就是单纯的求并集。
def union(other:RDD[T]):RDD[T]
val rdd1 =sc.makeRDD(Array(1,2,3,3))
val rdd2 =sc.makeRDD(Array(4,5,6,6))
rdd1.union(rdd2).collect.foreach(print)
输出结果为:1 2 3 3 4 5 6 6
三:intersectio 会进行shuffer
intersection操作和union相反,求的是两个rdd的交集且会进行去重。
方法定义: def intersection(other:RDD[T]):RDD[T]
val rdd1 =sc.makeRDD(Array(1,2,3,3))
val rdd2 =sc.makeRDD(Array(1,2,4,5,6,6))
rdd1.union(rdd2).collect.foreach(print)
输出结果是:1 2
四:group 会进行shuffer
group接受一个函数,rdd会根据函数的定义对rdd中的数据进行分组,并返回新的rdd,新的rdd是一个元组,
数据格式(组号,该组的迭代器)