使用数组对 RDD 进行分组

Grouping a RDD using an array

我有一个包含这些元素的 RDD:

("a", Array(1, 2)) | ("b", Array(3, 4)) | ("c", Array(1, 2))

我希望使用数组对其进行分组以便得到:

(Array("a", "c"), Array(1, 2)) | (Array("b"), Array(3, 4))

怎么做(最好是在 Scala 中)?

由于您不能使用 Spark 的默认分区程序将数组用作键,因此您必须按转换为列表的数组进行分组,然后将结果映射回您想要的结构:

val input: RDD[(String, Array[Int])] = ???

val result: RDD[(Array[String], Array[Int])] = input
  .groupBy(_._2.toList) // group by array
  .values // keep values only, of type Iterable[(String, Array[Int])]
  .map(it => (it.map(_._1).toArray, it.head._2)) // map back to requested format