2

Pig でフラット ファイルをどのように処理しますか? たとえば、最初の 4 桁が年、次の 5 桁が製品コード、最後の 8 桁が MSRP であるレコードを含む行がある場合、Pig でこのデータをどのようにクエリしますか? おそらく簡単なものが欠けていますが、これまでに見つけたものはすべて、Pig でデータをロードするときに区切り文字を使用する必要があります。

いくつかのサンプル データを以下に示します。

1999ABCDE12234.00
2000DCEFS00020.00
2012FFEWS00005.55

前もって感謝します。

ジェレミー

4

3 に答える 3

4

位置に基づいて行を分割する 1 つの方法は、REGEX_EXTRACT_ALLを使用することです。

例えば:

A = LOAD 'flat.txt' as (line:chararray);
B = FOREACH A GENERATE FLATTEN(REGEX_EXTRACT_ALL(line, 
      '^(.{1,4})(.{1,5})(.*)$')) AS (year:int, prod_code:chararray, msrp:double);
dump B;
(1999,ABCDE,12234.00)
(2000,DCEFS,00020.00)
(2012,FFEWS,00005.55)
于 2012-10-06T18:45:27.500 に答える
1

また、組み込みの SUBSTRING 関数があり、

A = LOAD 'flat.txt' as (line:chararray);

B = FOREACH A GENERATE SUBSTRING(line,0,3),SUBSTRING(line,4,8),SUBSTRING(line,9,16);

dump B;
于 2013-08-23T05:14:18.313 に答える