首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >烫伤如何用'*关键字在所有字段上映射?

烫伤如何用'*关键字在所有字段上映射?
EN

Stack Overflow用户
提问于 2014-03-12 17:56:55
回答 3查看 705关注 0票数 2

我想对我的管道的所有字段应用一个操作。我在https://github.com/twitter/scalding/wiki/Fields-based-API-Reference上看到“您可以使用'* (这里和其他地方)来表示所有字段。”但不知何故,我没有成功地使它发挥作用。有人能给我举个例子吗?

一开始我有一件事

代码语言:javascript
运行
复制
mySource.map('field1 -> 'field1){ number: String => number.trim }

我现在想把它应用到所有的领域

代码语言:javascript
运行
复制
mySource.map('* -> '*){ numbers: List[String] => numbers.map(_.trim) }
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2014-06-25 12:54:21

在烫伤字段API中,为了从'*映射到'*,我能想到的最佳方法是级联TupleEntrycascading.tuple.TupleEntry

代码语言:javascript
运行
复制
import com.twitter.scalding._
import cascading.tuple.TupleEntry

// Notice I do not specify the scheme when reading.
// I only know first column is 'user_id', the rest is some value and I want 
// to double the values. You can use 'map' or 'mapTo'.
Tsv(args("input"))
  .read
  .map('* -> '*) {
     fields: TupleEntry =>
     val sz: Int = fields.size()
     for (i <- from 1 until sz) fields.setDouble(i, fields.getDouble(i) * 2.0)
     fields.getTuple()
  }
  .write(Tsv(args("output")))
票数 1
EN

Stack Overflow用户

发布于 2014-04-15 13:06:48

'*操作符似乎只适用于mapTo和全类型注释。

代码语言:javascript
运行
复制
mySource
  .mapTo[(String,String,String),(String,String,String)]('* -> '*) { case (a: String, b: String, c: String) =>
    (a.trim, b.trim, c.trim)
  }
票数 0
EN

Stack Overflow用户

发布于 2014-12-03 09:55:29

例如,这适用于烫伤0.11.0 (当前的答案都不起作用):

代码语言:javascript
运行
复制
  mySource
    .mapTo('* -> '*) {
      entry: TupleEntry =>
        for (i <- 0 until entry.size) {
          if (entry.getObject(i) == null) entry.setRaw(i, "\\N")
        }
        entry.getTuple
    }

所以本质上是mapTo('* -> '*) -> entry.getTuple

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

https://stackoverflow.com/questions/22359955

复制
相关文章

相似问题

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