Scala 如何在Spark中将(键、数组(值))转换为(键、值)
我有一个RDD,如下所示:Scala 如何在Spark中将(键、数组(值))转换为(键、值),scala,apache-spark,rdd,Scala,Apache Spark,Rdd,我有一个RDD,如下所示: val rdd1 = sc.parallelize(Array((1,Array((3,4),(4,5))),(2,Array((4,2),(4,4),(3,9))))) 这是RDD[(Int,Array[(Int,Int)]]我想通过一些操作,如flatMap或其他,得到类似RDD[(Int,(Int,Int)]的结果。在本例中,结果应该是: (1,(3,4)) (1,(4,5)) (2,(4,2)) (2,(4,4)) (2,(3,9)) 我是spark的新手
val rdd1 = sc.parallelize(Array((1,Array((3,4),(4,5))),(2,Array((4,2),(4,4),(3,9)))))
这是RDD[(Int,Array[(Int,Int)]]
我想通过一些操作,如flatMap
或其他,得到类似RDD[(Int,(Int,Int)]
的结果。在本例中,结果应该是:
(1,(3,4))
(1,(4,5))
(2,(4,2))
(2,(4,4))
(2,(3,9))
我是spark的新手,那么我能做些什么来实现这一点呢?
非常感谢。假设RDD为
rd
。使用下面的代码获取所需的数据
rdd1.flatMap(x=>x.\u2.map(y=>(x.\u1,y)))
flatmap
中的Internalmap
方法读取x._2
是数组,一次读取数组的每个值为y
。之后,平面图将把它们作为单独的项提供。x._1
是RDD中的第一个值。假设RDD为rd
。使用下面的代码获取所需的数据
rdd1.flatMap(x=>x.\u2.map(y=>(x.\u1,y)))
flatmap
中的Internalmap
方法读取x._2
是数组,一次读取数组的每个值为y
。之后,平面图将作为单独的项提供它们。x._1
是RDD中的第一个值。在您的情况下,可以使用flatmap,如下所示:
val newRDD: RDD[(Int, (Int, Int))] = rdd1
.flatMap { case (k, values) => values.map(v => (k, v))}
您可以在您的案例中使用flatMap,如下所示:
val newRDD: RDD[(Int, (Int, Int))] = rdd1
.flatMap { case (k, values) => values.map(v => (k, v))}