我有一个文件:
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)发布于 2012-11-15 21:59:25
谢谢你,洛兰。
既然您给出了一点关于如何使用REGEX_EXTRACT_ALL的概念,下面就是我最终是如何使用它的。
FOREACH A GENERATE FLATTEN(REGEX_EXTRACT_ALL(line, '^([0-9]*)\\-([0-9]*).*'))
AS (FIELD1:chararray, FIELD2:chararray), line;非常有趣的是,Matcher.matches()对于'^([0-9]*)\\-([0-9]*)'是失败的,而对于'^([0-9]*)\\-([0-9]*).*'是有效的。
发布于 2012-11-15 21:32:42
下面是什么:
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 = ...
https://stackoverflow.com/questions/13396778
复制相似问题