首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Scalding:在groupBy之后保留所有字段

Scalding:在groupBy之后保留所有字段
EN

Stack Overflow用户
提问于 2014-04-08 23:19:20
回答 1查看 1.3K关注 0票数 3

我正在做一个groupBy来计算值,但是似乎当我使用group by时,我会丢失所有不在聚合键中的字段:

代码语言:javascript
复制
filtered.filterNot('site) {s:String => ...}
        .filterNot('date) {s:String => ...}
aggr = filtered.groupBy('id, 'contentHost) { group =>
    group.min('timestamp -> 'min)
    //how do I keep original fields? (eg: site, date)
}

aggr.store(Tsv(...)) //eg: field "site" won't be here

在pig中,它可能是这样的:

代码语言:javascript
复制
aggr = group filtered by concat('id, 'contentHost);

result = foreach aggr {
  generate flatten(filtered), //how to do this in scalding?
           min(filtered.timestamp) as min;
}
EN

回答 1

Stack Overflow用户

发布于 2014-04-14 21:16:12

我用tuple API也遇到了同样的问题,只能通过使用类型化API来解决。

您可以使用Scala元组,也可以在工作之外定义自己的case类。例如:

代码语言:javascript
复制
case class Data(id: String, site: String, date: String, contentHost: String)

然后你会像这样处理它:

代码语言:javascript
复制
val filtered: TypedPipe[Data] = TypedPipe.from(Seq(Data("...", "2014-04-14", "...", "...")))

filtered
  .filterNot ( data => data.site == "fr" )
  .filterNot ( data => data.date == "2014-02-01" )
  .groupBy (data => (data.id, data.contentHost)) // (String,String) -> Data
  .min // or .minBy { ... }
  .toTypedPipe
  .write(TypedTsv[((String, String), Data)]("/path/"))
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22941265

复制
相关文章

相似问题

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