【发布时间】:2015-01-12 12:29:04
【问题描述】:
我是 scala 的新手,无法解决这种类型相关的问题。
试图敲出一个函数,该函数将键值元组列表(键可能是非唯一的)转换为属于使用额外“列”列表选择的特定键的聚合值元组列表。 out 需要有 Array[Array[Any]] 的签名:
例子:
输入:
[("k1", 10), ("k2", 15), ("k1", 18), ("k3", 23), ("k1", 13), ("k2", 1)]
列:
COLUMNS = ["k1", "k2"]
输出:
[[10, 18, 13], [15, 1]]
我的尝试看起来像:
val COLUMNS = Array("k1", "k2")
def convert(result: Array[Tuple2[String, Any]]): Array[Array[Any]] = {
val grouped = result.groupBy(cell => cell._1)
val columns = grouped.mapValues(cell => cell.map(column => column._2))
val tuples = COLUMNS.map(col => columns.getOrElse(col, Array()))
return tuples
}
我收到以下错误:
<console>:21: error: type mismatch;
found : scala.collection.mutable.ArraySeq[Array[_]]
required: Array[Array[Any]]
return tuples
有人可以帮忙吗?注意我最后需要 Array[Array[Any]] 类型... 谢谢。
【问题讨论】:
-
您描述的输出类型是
Array[Array[Any]],而您的示例输出是[(Int, Int, Int), (Int, Int)],可能是Array[Any],但不是Array[Array[Any]],它需要一个额外的数组。你想要的输出是不是更像这样?:[[10, 18, 13], [15, 1]] -
@Rajit:是的,已在我的原始帖子中修复。
标签: scala