使用数组对RDD进行分组

时间:2016-08-14 13:49:55

标签: scala rdd

我有一个带有这些元素的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中)?

1 个答案:

答案 0 :(得分:2)

由于您无法使用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