如何指定猪圈?

时间:2015-01-06 11:46:53

标签: apache-pig

我正在编写一个猪脚本,我有空格分隔的数据,在某些列中间有空格但是用双引号括起来(")下面是我看到的样本外观数据:

a b c d e "f f1 f2" g
a1 b1 c1 d1 e1 "f1 f11 f12" g1

我正在尝试实现一个到f的列,其中f f1和f2属于f但我得到两个额外的列f1和f2应该来自列f

a = load 'file.txt' Using PigStorage(' ');

我怎么能在猪身上这样做?

更新数据

a b c d e "f f1 f2" g
a1 b1 c1 d1 e1 "f1 f11 f12" g1
a1 b1 c1 d1 e1 "fgn f1 f11 f12" g1
a1 b1 c1 d1 e1 f1 g1

1 个答案:

答案 0 :(得分:1)

您可以使用REGEX解决此问题,您可以尝试以下方法吗?

<强>输入

a b c d e "f f1 f2" g
a1 b1 c1 d1 e1 "f1 f11 f12" g1
a1 b1 c1 d1 e1 "fgn f1 f11 f12" g1
a1 b1 c1 d1 e1 f1 g1

<强> PigScript:

A = LOAD 'input' AS (line:chararray);
B = FOREACH A GENERATE FLATTEN(REGEX_EXTRACT_ALL(line,'(\\w+)\\s+(\\w+)\\s+(\\w+)\\s+(\\w+)\\s+(\\w+)\\s+"?([A-Za-z0-9\\s]+)"?\\s+(\\w+)')) AS (col1,col2,col3,col4,col5,col6,col7);
DUMP B;

<强>输出:

(a,b,c,d,e,f f1 f2,g)
(a1,b1,c1,d1,e1,f1 f11 f12,g1)
(a1,b1,c1,d1,e1,fgn f1 f11 f12,g1)
(a1,b1,c1,d1,e1,f1,g1)

现在col6变量会将值"f f1 f2""f1 f11 f12"存储为一个单元。