当前位置: 代码迷 >> 综合 >> spark rdd算子
  详细解决方案

spark rdd算子

热度:80   发布时间:2024-03-06 05:42:18.0

摘要

关于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是一个元组,

数据格式(组号,该组的迭代器)

  相关解决方案