2016-04-18 23 views
0

私はCDH 5.5,を使用しています。私はこのようなchararrayを持っています:25 - 45と私はこの文字列の25と45を抽出したい。豚0.12.0 - 文字列から最後の2文字を抽出する

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

私はminValueを抽出することができるが、指定されたStringのmaxValueすなわち、最後の2つの文字を抽出することができません:

だから、私はこれをしませんでした。私はこの仕事を作る方法を教えてください

は自分でも試してみましたが、この1はまた:

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

が機能していません。

答えて

1

delimeterが常にコロン( - )である場合、chararrayを分割して平坦化して最小値と最大値を抽出することができます。

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) 
1

SUBSTRING関数で特定の文字のインデックスを使用する必要があります。

ここがあなたの必要です。

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

が負の値を与えることによって、文字列の末尾から読み取るする方法はありませんか? – user182944

+0

負のインデックスを付けると、UDFはStringIndexOutOfBoundsExceptionを返しています:文字列インデックスが範囲外です。だから私は負の値をサポートしていないと思います。 – ninja123

関連する問題