2

次のファイルがあります。

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)
4

2 に答える 2

4

ありがとうローランド。

の使用方法について少しアイデアを出してくれたので、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-15T13:59:24.990 に答える
4

どうですか:

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 = ...

于 2012-11-15T13:32:41.740 に答える