我需要使用一个带有一列带有关联值的标签的管道,然后转动该管道,以便每个标签都有一列,每列中都有正确的值。举个例子,如果我有这个:
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是不受欢迎的。 'label中的东西数量是有限的而不是那么大(可能是30-50项),但可能会有所不同,具体取决于我正在使用的数据样本。
你提出的任何建议都会很棒。非常感谢!
答案 0 :(得分:1)
我认为你走在正确的轨道上,你只需要将所需的值映射到符号:
val newHeaders = lines
.map(_.split(" "))
.map(a=>a(1))
.distinct
.map(f=>Symbol(f))
.toList
出于性能原因,Execution
类型将帮助您与后续数据透视表结合使用。
请注意,我正在为lines
变量使用TypedPipe。
如果您希望您的代码简洁,您可以将第1行和第1行组合在一起。 2,但这只是一种风格选择:
map(_.split(" ")(1))
答案 1 :(得分:0)
尝试使用Execution
从数据中获取值列表。有关执行的更多信息:https://github.com/twitter/scalding/wiki/Calling-Scalding-from-inside-your-application