首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Scalding:从管道中的列创建列表

Scalding:从管道中的列创建列表
EN

Stack Overflow用户
提问于 2015-03-25 22:41:03
回答 2查看 948关注 0票数 1

我需要使用一个管道,该管道包含一列带有关联值的标签,并旋转该管道,以便每个标签都有一列,每列中都有正确的值。所以如果我有这样的例子:

代码语言:javascript
复制
Id  Label Value 
1   Red   5
1   Blue  6
2   Red   7
2   Blue  8
3   Red   9
3   Blue  10

我需要把它变成这样:

代码语言:javascript
复制
ID Red Blue
1  5   6
2  7   8
3  9   10

我知道如何使用pivot命令来执行此操作,但我必须显式地知道标签的值。如何将“label”列中的标签动态读取到一个列表中,然后传递给pivot命令?我尝试使用以下命令创建列表:

代码语言:javascript
复制
pipe.groupBy('id) {_.toList('label) }

,但我得到一个类型不匹配,说它找到了一个符号,但它是期望的(cascading.tuple.Fields,cascading.tuple.Fields)。此外,从在线阅读来看,使用toList听起来似乎不太受欢迎。标签中的东西的数量是有限的,也不是那么大(可能是30-50个),但可能会根据我使用的数据样本而有所不同。

如果你有任何建议,那就太好了。非常感谢!

EN

回答 2

Stack Overflow用户

发布于 2015-09-18 00:36:48

我认为你在正确的轨道上,你只需要将所需的值映射到符号:

代码语言:javascript
复制
val newHeaders = lines
    .map(_.split(" "))
    .map(a=>a(1))
    .distinct
    .map(f=>Symbol(f))
    .toList

出于性能方面的原因,Execution类型将帮助您与后续的pivot结合。

请注意,我对lines变量使用了TypedPipe。

如果你想让你的代码超级简洁,你可以将第1行和第2行结合起来,但这只是一个风格上的选择:

代码语言:javascript
复制
map(_.split(" ")(1))
票数 1
EN

Stack Overflow用户

发布于 2015-03-26 01:30:50

尝试使用Execution从数据中获取值列表。有关执行的更多信息:https://github.com/twitter/scalding/wiki/Calling-Scalding-from-inside-your-application

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29258801

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档