在火花scala中展平元素

Ach*_*s57 1 scala apache-spark rdd

我在RDD中有这样的数据:

RDD[((Int, Int, Int), ((Int, Int), Int))]
Run Code Online (Sandbox Code Playgroud)

如:

(((9,679,16),((2,274),1)), ((250,976,13),((2,218),1)))
Run Code Online (Sandbox Code Playgroud)

我希望输出为:

((9,679,16,2,274,1),(250,976,13,2,218,1))
Run Code Online (Sandbox Code Playgroud)

加入2 rdds后:

val joinSale = salesTwo.join(saleFinal)
Run Code Online (Sandbox Code Playgroud)

我得到了结果集.我尝试了以下代码.

joinSale.flatMap(x => x).take(100).foreach(println)
Run Code Online (Sandbox Code Playgroud)

我试过map/flatMap但是做不到.任何想法如何实现这样的场景?提前致谢 ..

Roh*_*tty 5

您可以使用scala中的模式匹配来完成此操作.只需将您的元组修改逻辑包装在类似于下面的地图中:

val mappedJoinSale = joinSale.map { case ((a, b, c), ((d, e), f)) => (a, b, c, d, e, f) }
Run Code Online (Sandbox Code Playgroud)

使用您的示例,我们有:

scala> val example = sc.parallelize(Array(((9,679,16),((2,274),1)), ((250,976,13),((2,218),1))))
example: org.apache.spark.rdd.RDD[((Int, Int, Int), ((Int, Int), Int))] = ParallelCollectionRDD[0] at parallelize at <console>:12

scala> val mapped = example.map { case ((a, b, c), ((d, e), f)) => (a, b, c, d, e, f) }
mapped: org.apache.spark.rdd.RDD[(Int, Int, Int, Int, Int, Int)] = MappedRDD[1] at map at <console>:14

scala> mapped.take(2).foreach(println)
...
(9,679,16,2,274,1)
(250,976,13,2,218,1)
Run Code Online (Sandbox Code Playgroud)