在PIG脚本中嵌入shell

时间:2014-04-22 01:36:05

标签: shell apache-pig

我是PIG和shell模式匹配的新手。

我有一个文件,第3列的内容类似于" M2534896R402Qnew"。 我需要在' M'之间提取数字。和' R'。

在PIG脚本中,

raw = load 'record.txt' using PigStorage('\t') as (chararray, chararray,chararray,chararray);
data = stream raw through `shell command`;

如何更改第3列,以便所有数据的第3列都是从原始数据中提取的数字?

感谢。

1 个答案:

答案 0 :(得分:3)

没有必要为此使用流媒体。猪可以处理它。使用内置UDF REGEX_EXTRACT

$ cat record.txt
f1      f2      M2534896R402Qnew        f4
f1      f2      M2534896R987Qxyz        f4
f1      f2      M2534897R421Qabc        f4
f1      f2      M47Rzxcvzxcv    f4
f1      f2      12345M000R      f4
f1      f2      M23551Qnew      f4
f1      f2      M298793R133R23Qnew      f4

$ cat test.pig
raw = load 'record.txt' using PigStorage('\t') as (f1:chararray, f2:chararray, f3:chararray, f4:chararray);
ext = FOREACH raw GENERATE REGEX_EXTRACT(f3, 'M(\\d+)R', 1) AS num;
DUMP ext;

$ pig -x local test.pig
(2534896)
(2534896)
(2534897)
(47)
(000)
()
(298793)

请注意REGEX_EXTRACT的结果是chararray。如果你想要int,你必须投射它。