我有以下文件:

File
----
12-3    John    121
 5-1    Sam     122

该文件由制表符(\t)分隔。我要将行作为line:chararray加载,因为我希望数据不要在各个字段中拆分。

现在,我想将详细信息(12-3和5-1)存储并存储为单独的数据。

我正在尝试使用STRSPLITREGEX_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/

10-12 22:52