Hadoop Pig 0.12.0-从字符串中提取最后两个字符

Hadoop Pig 0.12.0-从字符串中提取最后两个字符,hadoop,mapreduce,apache-pig,cloudera,bigdata,Hadoop,Mapreduce,Apache Pig,Cloudera,Bigdata,我正在使用CDH 5.5,清管器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);

我正在使用CDH 5.5,
清管器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);

请告诉我如何进行此操作。

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

这是你需要的

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

必须在子字符串函数中使用特定字符的索引

这是你需要的

maxValue = (int)SUBSTRING(value,5,7);
如果delimeter始终为冒号(-),则可以拆分并展平字符以提取最小值和最大值

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)
输出:

25 - 45
35 - 65
45 - 85
(25,45)
(35,65)
(45,85)
如果delimeter始终为冒号(-),则可以拆分并展平字符以提取最小值和最大值

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)
输出:

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

是否有一种方法可以通过给出负值来读取字符串的结尾?当我给出负索引时,UDF返回StringIndexOutOfBoundsException:字符串索引超出范围。所以我猜它不支持负值。有没有一种方法可以通过给出负值来读取字符串的结尾?当我给出负索引时,UDF返回StringIndexOutOfBoundsException:字符串索引超出范围。所以我猜它不支持负值。