我有一对像火花这样的两对RDD
rdd1 = (1 -> [4,5,6,7])
(2 -> [4,5])
(3 -> [6,7])
rdd2 = (4 -> [1001,1000,1002,1003])
(5 -> [1004,1001,1006,1007])
(6 -> [1007,1009,1005,1008])
(7 -> [1011,1012,1013,1010])
我想将它们组合起来看起来像这样。
joinedRdd = (1 -> [1000,1001,1002,1003,1004,1005,1006,1007,1008,1009,1010,1011,1012,1013])
(2 -> [1000,1001,1002,1003,1004,1006,1007])
(3 -> [1005,1007,1008,1009,1010,1011,1012,1013])
有人可以建议我怎么做。
由于 迪利普
答案 0 :(得分:0)
使用Scala Spark API,这将是
import org.apache.spark.SparkContext._ // enable PairRDDFunctions
val rdd1Flat = rdd1.flatMapValues(identity).map(_.swap)
val rdd2Flat = rdd2.flatMapValues(identity)
rdd1Flat.join(rdd2Flat).values.distinct.groupByKey.collect
此操作的结果是
Array[(Int, Iterable[Int])] = Array(
(1,CompactBuffer(1001, 1011, 1006, 1002, 1003, 1013, 1005, 1007, 1009, 1000, 1012, 1008, 1010, 1004)),
(2,CompactBuffer(1003, 1004, 1007, 1000, 1002, 1001, 1006)),
(3,CompactBuffer(1008, 1009, 1007, 1011, 1005, 1010, 1013, 1012)))
Gabor提出的方法不起作用,因为Spark doesn't support RDD操作在其他RDD操作中执行。在尝试访问驱动程序上可用的SparkContext时,您将获得工作者抛出的Java NPE。