我需要使用一个管道,该管道包含一列带有关联值的标签,并旋转该管道,以便每个标签都有一列,每列中都有正确的值。所以如果我有这样的例子:
Id Label Value
1 Red 5
1 Blue 6
2 Red 7
2 Blue 8
3 Red 9
3 Blue 10我需要把它变成这样:
ID Red Blue
1 5 6
2 7 8
3 9 10我知道如何使用pivot命令来执行此操作,但我必须显式地知道标签的值。如何将“label”列中的标签动态读取到一个列表中,然后传递给pivot命令?我尝试使用以下命令创建列表:
pipe.groupBy('id) {_.toList('label) },但我得到一个类型不匹配,说它找到了一个符号,但它是期望的(cascading.tuple.Fields,cascading.tuple.Fields)。此外,从在线阅读来看,使用toList听起来似乎不太受欢迎。标签中的东西的数量是有限的,也不是那么大(可能是30-50个),但可能会根据我使用的数据样本而有所不同。
如果你有任何建议,那就太好了。非常感谢!
发布于 2015-09-18 00:36:48
我认为你在正确的轨道上,你只需要将所需的值映射到符号:
val newHeaders = lines
.map(_.split(" "))
.map(a=>a(1))
.distinct
.map(f=>Symbol(f))
.toList出于性能方面的原因,Execution类型将帮助您与后续的pivot结合。
请注意,我对lines变量使用了TypedPipe。
如果你想让你的代码超级简洁,你可以将第1行和第2行结合起来,但这只是一个风格上的选择:
map(_.split(" ")(1))发布于 2015-03-26 01:30:50
尝试使用Execution从数据中获取值列表。有关执行的更多信息:https://github.com/twitter/scalding/wiki/Calling-Scalding-from-inside-your-application
https://stackoverflow.com/questions/29258801
复制相似问题