如何将Spark RDD的副本存储到另一个RDD

时间:2019-10-09 13:53:11

标签: apache-spark rdd

我有两个火花rdd: RDD1:RDD [(String,String,Int)]和RDD2:RDD [(String,String,Int)]

RDD1是原始数据,而RDD2与RDD1不同

我需要创建一个RDD3,即RDD1-RDD2

例如:

RDD1:  [("one","one",23)],[("one","one",23)],[("two","two",28)],[("one","one",23)]
RDD2:  [("one","one",23)],[("two","two",28)]

预期

RDD3:[("one","one",23)],[("one","one",23)] 

仅重复项的数量减少1的重复项

RD#仅收集重复项,例如,如果10笔交易中有1笔交易是唯一的,那么我应该在RDD3中收集9笔交易

1 个答案:

答案 0 :(得分:0)

val rdd1 = sc.parallelize(List(("A", "ANT", 1), ("A", "ANT", 1), ("B", "BALL", 2), ("C", "CAT", 3), ("C", "CAT", 3))).zipWithIndex()
rdd1.collect().foreach(r => print(r))

val rdd2 = rdd1.reduceByKey((a, b) => if (a != b) a else b)
rdd2.collect().foreach(r => print(r))


val rdd3 = rdd1.subtract(rdd2).map(p => p._1)
rdd3.collect().foreach(r => print(r))

结果:

RDD1: ((A,ANT,1),0)((A,ANT,1),1)((B,BALL,2),2)((C,CAT,3),3)((C,CAT,3),4)
RDD2: ((A,ANT,1),0)((C,CAT,3),3)((B,BALL,2),2)
RDD3: (C,CAT,3)(A,ANT,1)