我在使用Spark
运行下面代码的最后一行有以下异常org.apache.spark.SparkException:只能在每个分区中压缩具有相同元素数量的RDD
val rdd1 = anRDD
val rdd2 = AnotherRDD
println(rdd1.count() == rdd2.count()) // Write true
val nparts = rdd1.getNumPartitions + rdd2.getNumPartitions
val rdd1Bis = rdd1.repartition(nparts) // Try to repartition (useless)
val rdd2Bis = rdd2.repartition(nparts)
val zipped = rdd1Bis.zip(rdd2Bis)
println(zipped.count())
有什么问题?
PS:如果我在压缩之前收集rdd1和rdd2但是我需要将它们保存为RDD
答案 0 :(得分:2)
解决方案可以是使用连接进行压缩:
val rdd1Bis = rdd1.zipWithIndex.map((x) =>(x._2, x._1))
val rdd2Bis = rdd2.zipWithIndex.map((x) =>(x._2, x._1))
val zipped = rdd1Bis.join(rdd2Bis).map(x => x._2)
答案 1 :(得分:0)
它可以检查:请回复它失败的部分
val list1 = List("a","b","c","d")
val list1 = List("a","b","c","d")
val rdd1 = sc.parallelize(list1)
val rdd1 = sc.parallelize(list2)
执行你的代码:
val nparts = rdd1.getNumPartitions + rdd2.getNumPartitions
val rdd1Bis = rdd1.repartition(nparts) // Try to repartition (useless)
val rdd2Bis = rdd2.repartition(nparts)
val zipped = rdd1Bis.zip(rdd2Bis)
结果:
println(zipped.count())
4
zipped.foreach(println)
(a,a)
(b,b)
(c,c)
(d,d)