如何相互乘以RDD中的每一行



我有一个类似于

的RDD
CELL-ID | COUNT
--------------
abcd       10
DEF        20
ghi        15

我需要用

获得RDD
CELL-ID-1 | CELL-ID-2 | PRODUCT
--------------
abcd       DEF            200
abcd       ghi            150
DEF        abcd           200
DEF        ghi            300
...
....

如何完成?我一直在使用笛卡尔产品,但无法获得输出

val result = orginalRDD.cartesian(orginalRDD).collect {
  case ((t1: _,Int), (t2: _,Int)) if t1 != t2 => t1 * t2
}

您可以制作t1,而t2表示元组(整个"记录"):

val result = orginalRDD.cartesian(orginalRDD).collect {
  case (t1: (String ,Int), t2: (String ,Int)) if t1 != t2 => (t1._1, t2._1, t1._2 * t2._2)
}

或者,您可以执行相同的操作,但是使用图案匹配进一步分解它们:

val result = orginalRDD.cartesian(orginalRDD).collect {
  case (t1@(s1 ,i1), t2@(s2, i2)) if t1 != t2 => (s1, s2, i1 * i2)
}

您的解决方案看起来像是一次尝试同时做...

相关内容

  • 没有找到相关文章

最新更新