我想知道如何在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]]
Thsi是我的代码
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(_,_))
我想要一个列表,按键减少。
还有其他一些我不知道的操作吗?
非常感谢你的帮助!
答案 0 :(得分:1)
这是一个有效的例子:
val data = "1,2,3,4\n0,7,8,9\n1,5,6,7\n0,6,5,7".split("\n")
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))))
}.toList
//parsedData: List[(Int, List[Int])] = List((1,List(2, 3, 4)), (0,List(7, 8, 9)), (1,List(5, 6, 7)), (0,List(6, 5, 7)))
parsedData.groupBy(_._1).mapValues(_.map(_._2))
// Map(1 -> List(List(2, 3, 4), List(5, 6, 7)), 0 -> List(List(7, 8, 9), List(6, 5, 7)))
答案 1 :(得分:0)
我不确定这是你正在寻找的结论。
你能试试吗:
parsedData.reduceByKey(_ :: _ :: Nil)
这应该在字面上创建一个包含
元素的新列表