Spark RDD 算子 (双Value类型)

双Value 类型

双Value 类型是指两个 RDD 之间的操作

并集 union(other: RDD[T])

  • 作用:并集;对源RDD参数RDD并集后返回一个新的RDD

创建RDD

val listRDD: RDD[Int] = sc.makeRDD(1 to 5)
val listRDD1: RDD[Int] = sc.makeRDD(2 to 7)

转换RDD

val resRDD: RDD[Int] = listRDD.union(listRDD1)

结果输出

val r = resRDD.collect()
println(r.mkString(","))
------------------------
1,2,3,4,5,2,3,4,5,6,7

交集 intersection(other: RDD[T],[numPartitions: Int])

  • 作用:交集,返回 两个RDD中 相同的值

创建RDD

val listRDD: RDD[Int] = sc.makeRDD(1 to 5)
val listRDD1: RDD[Int] = sc.makeRDD(3 to 8)

转换RDD

val resRDD: RDD[Int] = listRDD.intersection(listRDD1)

结果输出

val r = resRDD.collect()
println(r.mkString(","))
------------------------
3,4,5

差集 subtract(other: RDD[T],[numPartitions: Int])

  • 作用:差集;返回源RDD 中与 参数RDD 中不同的值。

创建RDD

val listRDD: RDD[Int] = sc.makeRDD(1 to 5)
val listRDD1: RDD[Int] = sc.makeRDD(3 to 8)

转换RDD

val resRDD: RDD[Int] = listRDD.subtract(listRDD1)

结果输出

val r = resRDD.collect()
println(r.mkString(","))
------------------------
1,2

intersection(other: RDD[T])

  • 作用:笛卡尔积(尽量避免使用)

创建RDD

val listRDD: RDD[Int] = sc.makeRDD(1 to 5)
val listRDD1: RDD[Int] = sc.makeRDD(3 to 7)

转换RDD

val resRDD: RDD[(Int, Int)] = listRDD.cartesian(listRDD1)

结果输出

val r = resRDD.collect()
println(r.mkString(","))
------------------------
(1,5),(1,6),(1,7),(2,5),(2,6),(2,7),(3,5),(3,6),(3,7)

zip(other: RDD[T])

  • 作用:将两个RDD按照元素顺序组合成Key/Value形式的RDD,两个RDD的partition数量以及元素数量都相同,否则会抛出异常。

创建RDD

val listRDD: RDD[Int] = sc.makeRDD(1 to 5)
val listRDD1: RDD[Int] = sc.makeRDD(3 to 7)

转换RDD

val resRDD: RDD[(Int, Int)] = listRDD.zip(listRDD1)

结果输出

val r = resRDD.collect()
println(r.mkString(","))
------------------------
(1,5),(2,6),(3,7)
发表评论 / Comment

用心评论~