计算Array[Int]的两个RDD的集合差



我有两个RDD,比如A和B,类型为RDD[Array[Int]],想要计算集合差A-B和B-A。我尝试了以下代码

val R1 = A.subtract(B)
val R2 = B.subtract(A)

但它不会返回正确的答案。在前面的回答中,提到">通常不支持使用可变类型(本例中为Array(执行减法等设置操作,或者至少不建议执行。"因此,我必须将代码更改为

val A1 = A.map(_.to[ArrayBuffer]).persist()
val B1 = B.map(_.to[ArrayBuffer]).persist()
val R1 = A1.subtract(B1)
val R2 = B1.subtract(A1)

现在它返回正确答案。我想知道是否有更有效的方法。

链接的答案具有误导性。问题不在于可变性。解决该问题的CCD_ 2也是可变的。

subtract内部比较使用equalsequals的元素。java数组的方法被破坏(它只是默认为引用相等(。

A1.map(_.toSeq).subtract(A2.map(_.toSeq))将起作用。

.toSeq将java数组封装到scala的WrappedArray中,后者具有不那么令人惊讶的相等实现。

最新更新