如何在 spark 中操作这个 Iterable?

How to manipulate this Iterable in spark?

我有一个 rdd:

val input = RDD[(Int, Iterable[(info1, info2)])]

我需要的是:

RDD[(Int, Array[info2])]

现在我正在尝试

val output = input.mapValue(ele => ???.toArray)

???是我遇到的困难,我不知道如何访问 iterable 中的元组并且只将它们中的每一个都带到一个数组中。还是我选择了 mapValue 方法做错了什么?

如果结果不需要数组,并且可以使用任何类型的 Seq,也许可以使用以下内容:

给定这个数据集示例:

val inputrdd = sc.parallelize(Seq((1, Iterable((101,102))), (2, Iterable((201,202))), (3, Iterable((301,302)))))

您可以像这样使用 mapValue:

inputrdd.mapValues(iter => iter.map(_._2))

相当于:

inputrdd.map{case(k,iter)=>(k,iter.map(_._2))}

iter 是可迭代对象,它位于 map(_._2) 元组的第二部分。

至此,您现在了解如何访问和操作可迭代对象。如果你需要,强制一个数组,你可以这样做:

inputrdd.mapValues(iter => iter.map(_._2).toArray)