記錄一個Pig字符串截取的實戰小例子:
需求以下,從下面的字符串裏提取出第2列(冒號後面)的值:
java
1 2 3 4 a:ab#c#d a:c#c#d a:dd#c#d a:zz#c#d
若是是在java裏,方法可能有不少種,好比substring,或者split屢次等,在pig也大體如此,能夠使用SUBSTRING內置函數來完成,但散仙推薦使用下面的方式,這種方式比較靈活,適合大部分場景的數據提取,須要用到的2個函數以下:
(1)REGEX_EXTRACT('原始字符串','正則式',int類型的返回索引)
(2)STRSPLIT('原始字符串', '正則式', 限制返回的個數)
pig腳本寫法:
函數
a = laod '/tmp/data' as (data:chararray) //注意邏輯是,先獲取冒號後面的數據,而後split成tuple,再經過$1(下標訪問元素)獲取咱們須要的數據便可。 b = foreach a generate STRSPLIT (REGEX_EXTRACT (data, '(.*):(.*)', 2) ,'#',5).$0; dump b;