【发布时间】:2015-12-15 17:22:45
【问题描述】:
我想知道如何在 reduce 操作的结果中创建 List 列表。
我有例如这行
1,2,3,4
0,7,8,9
1,5,6,7
0,6,5,7
我想得到这样的东西
1, [[2,3,4],[5,6,7]]
0, [[7,8,9],[6,5,7]]
这是我的代码
val parsedData = data.map { line =>
val parts = line.split(",")
val label = Integer.parseInt(parts(0))
(label, List(Integer.parseInt(parts(1)), Integer.parseInt(parts(2)), Integer.parseInt(parts(3)))
}
这样我就明白了
1, [2,3,4]
0, [7,8,9]
1, [5,6,7]
0, [6,5,7]
但是,如果我将 reduceByKey 操作与 List.concat(_,_) 一起使用,我会得到一个包含所有项目的列表。
parsedData.reduceByKey(List.concat(_,_))
我想要一个 List 列表,由 Key 减少。
还有其他不知道的操作吗?
非常感谢您的帮助!
【问题讨论】:
-
reduceByKey方法从何而来?你自己定义了吗? -
不是,是scala提供的reduceByKey,我没有定义
-
这行得通吗?
parsedData.groupBy(_._1) -
@Rahul No
scala> parsedData.groupBy(_._1) res36: org.apache.spark.rdd.RDD[(Int, Iterable[(Int, List[Int])])] = ShuffledRDD[42] at groupBy at <console>:38 scala> parsedData.foreach(println) (0,List(6, 5, 7)) (1,List(2, 3, 4)) (0,List(7, 8, 9)) (1,List(5, 6, 7)) -
您可以查看
aggregateByKey,因为您的结果是List[List[Int]]类型,而reduceByKey需要List[Int]。