【问题标题】:Pig 0.12.0 - extracting last two characters from a stringPig 0.12.0 - 从字符串中提取最后两个字符
【发布时间】:2016-04-18 15:44:55
【问题描述】:

我正在使用CDH 5.5Pig 0.12.0。我有一个像这样的chararray25 - 45,我想从这个字符串中提取 25 和 45。

所以,我这样做了:

minValue = (int)SUBSTRING(value,0,2);
maxValue = ((int)SUBSTRING(value,6,2);

我能够提取minValue,但无法提取maxValue,即给定字符串的最后两个字符。

即使我尝试过,但这个也不起作用。:

maxValue = ((int)SUBSTRING(value,-2,2);

请告诉我如何完成这项工作。

【问题讨论】:

    标签: hadoop mapreduce apache-pig cloudera bigdata


    【解决方案1】:

    如果分隔符总是冒号( - ),那么我们可以拆分并展平字符数组以提取最小值和最大值。

    A = LOAD 'input.csv' USING PigStorage(',') AS (min_max:chararray);
    B = FOREACH A GENERATE FLATTEN(STRSPLIT(min_max,' - ',0)) AS (min_val:chararray, max_val:chararray);
    DUMP B;
    

    输入:

    25 - 45
    35 - 65
    45 - 85
    

    输出:

    (25,45)
    (35,65)
    (45,85)
    

    【讨论】:

      【解决方案2】:

      您必须在 SUBSTRING 函数中使用特定字符的索引。

      这是您需要的。

      maxValue = (int)SUBSTRING(value,5,7);
      

      【讨论】:

      • 有没有办法通过给出负值从字符串末尾读取?
      • 当我给出负索引时,UDF 返回 StringIndexOutOfBoundsException :字符串索引超出范围。所以我猜它不支持负值。
      猜你喜欢
      • 1970-01-01
      • 2011-12-19
      • 2021-05-29
      • 1970-01-01
      • 2016-01-21
      • 2014-05-26
      • 1970-01-01
      • 2017-12-28
      相关资源
      最近更新 更多