我正在编写一个猪脚本,我有空格分隔的数据,在某些列中间有空格但是用双引号括起来(")下面是我看到的样本外观数据:
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
答案 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"
存储为一个单元。