我正在尝试按键对一些数据进行分组,其中值将是一个列表:
示例数据:
A 1
A 2
B 1
B 2预期结果:
(A,(1,2))
(B,(1,2))我可以用下面的代码做到这一点:
data.groupByKey().mapValues(List(_))问题是,当我尝试执行如下Map操作时:
groupedData.map((k,v) => (k,v(0))) 它告诉我我有错误的参数数量。
如果我尝试:
groupedData.map(s => (s(0),s(1)))它告诉我"(Any,List(Iterable(Any)不带参数“
不知道我做错了什么。我的分组有错吗?有什么更好的方法可以做到这一点?
请只回答Scala问题。谢谢!!
发布于 2015-12-18 05:28:03
你就快到了。只需用_.toList替换List(_)即可
data.groupByKey.mapValues(_.toList)发布于 2015-12-18 05:37:17
当您编写表单的匿名内联函数时
ARGS => OPERATION箭头前面的整个部分(=>)被用作参数列表。因此,在这种情况下
(k, v) => ...解释器认为这意味着一个带有两个参数的函数。然而,在本例中,您有一个恰好是一个元组的参数(这里是一个Tuple2或Pair -更完整地说,您似乎有一个Pair[Any,List[Any]]列表)。有几种方法可以解决这个问题。首先,您可以使用加糖的形式表示一个对,用一组额外的圆括号表示,以表明这是函数的单个预期参数:
((x, y)) => ...或者,您可以以匹配元组的部分函数的形式编写匿名函数:
groupedData.map( case (k,v) => (k,v(0)) ) 最后,您可以简单地使用一个指定的参数,就像您最后一次尝试一样,但是-意识到它是一个元组-引用您需要的元组中的特定字段:
groupedData.map(s => (s._2(0),s._2(1))) // The key is s._1, and the value list is s._2 https://stackoverflow.com/questions/34344455
复制相似问题