我有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))
此处正在4
与1
,2
与3
等等。我希望得到以下格式的结果:
Array((1,1), (2,2), (3,3), (4,4))
我应该如何对它们应用zip操作,以便达到预期的输出?
答案 0 :(得分:1)
当rdd
shuffled
distinct
失灵时,您的第一个values
为pair 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)