我有以下文件:
File
----
12-3 John 121
5-1 Sam 122
该文件由制表符(
\t
)分隔。我要将行作为line:chararray
加载,因为我希望数据不要在各个字段中拆分。现在,我想将详细信息(12-3和5-1)存储并存储为单独的数据。
我正在尝试使用
STRSPLIT
和REGEX_EXTRACT_ALL
,但是数据似乎不匹配。splitdata = FOREACH filedata {
regex = REGEX_EXTRACT_ALL(line, '^([0-9]*)\\-([0-9]*)');
split = STRSPLIT(line, '\\t', 1);
GENERATE regex, split;
};
这就是我希望最终数据为:
(12, 3, 12-3 John 121)
( 5, 1, 5-1 Sam 122)
最佳答案
关于什么:
A = LOAD .... AS (line:chararray);
B = FOREACH A GENERATE FLATTEN(REGEX_EXTRACT_ALL(line, '^(.*)\t(.*)\t(.*)$'))
AS (id:chararray, name:chararray, nameid:chararray);
C = FOREACH B GENERATE FLATTEN(REGEX_EXTRACT_ALL(id, '^([0-9]*)\\-([0-9]*)')),
id, name, nameid;
STORE C INTO ...
如果在加载时将行沿\ t分成几行,则可以跳过
B = ...
关于hadoop - pig 拉丁文中的STRSPLIT和REGEXP_EXTRACT_ALL,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/13396778/