如何将RDD如((int,int),int)转换为spark中一个map函数中的3个键值对?

时间:2017-02-20 17:46:30

标签: scala apache-spark

现在我有以下格式的RDD

var activeMedDup = ActiveMedications?.Select($"convert(int,strDDI) = '{dup.DDI}'")

我试图将它转换为3个键值对,如(int,1)。

我可以通过使用3个地图函数然后将它们连接在一起来实现这一点,但它绝对不是实现它的最佳方式,

也可以通过使用case我可以生成((int,1),(int,1),(int,1))的列表,但是如何生成List of(int,1)?

2 个答案:

答案 0 :(得分:2)

也许你想要flatMap

rdd.flatMap { case ((x, y), z) => List((x, 1), (y, 1), (z, 1)) }

上面的代码生成RDD[(Int, Int)],将RDD中的每个嵌套元组扩展为三个独立的RDD元素。

答案 1 :(得分:1)

它不应该采用三个地图功能,而是一个地图功能,如下所示

inputRDD.map({case ((x,y),z) => ((x,1),(y,1),(z,1))})