Spark pairedrdd:foldByKey用法

时间:2016-01-20 20:42:54

标签: scala apache-spark

我有一个关于在配对RDD上使用foldByKey的问题。这是我的示例数据:

val data: Array[(String, Array[Int])] = Array((120,Array(10, 4, 108, 520)), (2,Array(25, 11, 270, 180, 14)))

我想以下列方式获取数据:

val data: Array[(String, String)] = Array((120, "10 4 108 520"), (2, "25 11 270 180 14"))

我认为foldByKey是要使用的函数,任何有关如何使用它来将我的int数组转换为字符串的帮助都会很棒。

2 个答案:

答案 0 :(得分:1)

实际上,由于您的数据已存储在数组中,因此您只需要mapValues来电:

data.mapValues(_.mkString(" "))

但是,如果您的阵列太大,并且您实际将其存储为:

120 | 10
120 | 4
120 | 108
etc

然后你会想要使用reduceByKeyaggregateByKey ...取决于是否需要维护订单,因为它变成了字符串。

答案 1 :(得分:0)

val data: Array[(String, Array[Int])] = Array(("120",Array(10, 4, 108, 520)), ("2",Array(25, 11, 270, 180, 14)))
val d=data.map(x=>(x._1,x._2.mkString(" ")))
val e=sc.parallelize(d)
e.foldByKey("")(_+_).collect

如果不是直截了当,请纠正我。