如何在另一个RDD中将RDD与其对应的元素压缩?

时间:2017-06-02 05:22:57

标签: scala apache-spark rdd

我有2个RDD。像这样:

RDD1集

scala> val rdd1 = spark.sparkContext.parallelize(List(1,1,2,3,4,4))
rdd1: org.apache.spark.rdd.RDD[Int] = ParallelCollectionRDD[101] at parallelize at <console>:23

它包含重复的值。

RDD2

scala> val rdd2 = spark.sparkContext.parallelize(List(1,2,3,4))
rdd2: org.apache.spark.rdd.RDD[Int] = ParallelCollectionRDD[102] at parallelize at <console>:23

它包含 RDD1 中的所有唯一值。

现在,我正在将zip应用于 RDD1 RDD2 ,如下所示:

scala> rdd1.distinct.coalesce(rdd2.getNumPartitions).zip(rdd2).collect
res22: Array[(Int, Int)] = Array((4,1), (1,2), (2,3), (3,4))

此处正在4123等等。我希望得到以下格式的结果:

Array((1,1), (2,2), (3,3), (4,4))

我应该如何对它们应用zip操作,以便达到预期的输出?

1 个答案:

答案 0 :(得分:1)

rdd shuffled distinct失灵时,您的第一个valuespair rdd

您可以做的是创建rdd1的{​​{1}}并执行sorting并继续其余

val rdd1 = sc.parallelize(List(1,1,2,3,4,4)).map(x => ("a", x)).distinct.sortBy(_._2).values
val rdd2 = sc.parallelize(List(1,2,3,4))
rdd1.coalesce(rdd2.getNumPartitions).zip(rdd2)