【问题标题】:List of List in scalascala中的List列表
【发布时间】: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]

标签: list scala reduce


【解决方案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)))

【讨论】:

    【解决方案2】:

    我不确定这是你要找的 concat。

    你可以试试吗:

    parsedData.reduceByKey(_ :: _ :: Nil)
    

    这应该从字面上创建一个包含您的元素的新列表

    【讨论】:

    • Scala 不起作用> parsedData.reduceByKey(_ :: _ :: Nil) :38: error: type mismatch;发现:List[Integer] required: Integer parsedData.reduceByKey(_ :: _ :: Nil)
    猜你喜欢
    • 2012-09-18
    • 1970-01-01
    • 2017-03-13
    • 2015-11-04
    • 1970-01-01
    • 2015-03-18
    • 2017-03-05
    • 2018-05-21
    • 2016-07-16
    相关资源
    最近更新 更多