Pig 0.12.0 - 从字符串中提取最后两个字符
Posted
技术标签:
【中文标题】Pig 0.12.0 - 从字符串中提取最后两个字符【英文标题】:Pig 0.12.0 - extracting last two characters from a string 【发布时间】:2016-04-18 15:44:55 【问题描述】:我正在使用CDH 5.5
、Pig 0.12.0
。我有一个像这样的chararray
:25 - 45
,我想从这个字符串中提取 25 和 45。
所以,我这样做了:
minValue = (int)SUBSTRING(value,0,2);
maxValue = ((int)SUBSTRING(value,6,2);
我能够提取minValue
,但无法提取maxValue
,即给定字符串的最后两个字符。
即使我尝试过,但这个也不起作用。:
maxValue = ((int)SUBSTRING(value,-2,2);
请告诉我如何完成这项工作。
【问题讨论】:
【参考方案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 :字符串索引超出范围。所以我猜它不支持负值。以上是关于Pig 0.12.0 - 从字符串中提取最后两个字符的主要内容,如果未能解决你的问题,请参考以下文章
无法在 Amazon EMR 集群上使用 PIG 0.12.0 和 Hadoop 2.4.0 找到 MySql 驱动程序