【问题标题】:Convert "3" to 3 with PigLatin使用 PigLatin 将“3”转换为 3
【发布时间】:2010-12-08 16:04:31
【问题描述】:

我读入了一个 csv 文件,其中包含带有如下数字的字段:“3”。 我可以使用 PigLatin 将此字段从“3”转换为 3 吗?我需要它来使用 SUM() - 函数。

感谢您的帮助!

【问题讨论】:

  • Areway ouyay uresay it'sway otnay "eethray"? (我知道你实际上指的是什么,我只是在胡闹:P)
  • 我想知道 Pig Latin(“语言”,而不是 Hadoop 子项目)主要是美国的东西,还是以英语为母语的人知道的东西?看起来克里斯托夫在德国。无论如何,Christoph,猪拉丁语是一种游戏语言,其中通过将声母移到单词末尾并添加“ay”来改变英语单词。
  • 哈哈,是的,我确定它不是“三”:-D

标签: csv hadoop apache-pig


【解决方案1】:

"REPLACE 一起删除怎么样?

例如:

data =
    LOAD 'data.txt' AS (num:CHARARRAY);

numbers =
    FOREACH data
    GENERATE
        (INT) REPLACE(num, '\\"', '');

那么你可以GROUPSUM

一个优点是可以将返回的字符串直接转换为数字(无需处理包)。 REGEX_EXTRACT 也可以用来做同样的事情。

【讨论】:

  • 我必须做一个过滤器,我需要选择所有大于 1 的值,我这样做了:inputData = FILTER inputData BY (INT) REPLACE((chararray)value#'val', '\\"', '')>1;。看起来不错?
【解决方案2】:

TOKENIZE 函数将字符串拆分为被认为是单词分隔符的各种字符,其中一个是引号。所以如果你标记“3”并取中间项,它应该只是 3。

【讨论】:

    【解决方案3】:

    您可以编写一个去掉引号的 UDF,或者使用 JacobM 的方法。

    但是,之后,您应该将 chararray '3' 转换为 int(int)$1(int)myvalue。这样你就可以使用sum

    http://pig.apache.org/docs/r0.5.0/piglatin_reference.html#Cast+Operators

    【讨论】:

      猜你喜欢
      • 2018-03-03
      • 1970-01-01
      • 1970-01-01
      • 2015-06-09
      • 2017-12-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多