1

入力ソースを識別するために、入力データのロード中に -tagsource オプションを使用しています。後で、入力タプルから選択したフィールドのみを投影するときに、いくつかの仮定があり、無視しようとしても特定のフィールドが常に投影されるようです。

私のスクリプトを見てください。

rawdata = load 'data/201212*' using PigStorage(' ', '-tagsource') as (filename:chararray, ts: int, ip: chararray, domain: chararray, answer: chararray);

A = foreach rawdata generate ts, ip, domain, answer, CONCAT(CONCAT(filename, '_'), UPPER(SUBSTRING(domain, 0, 1))) as domain_index, filename as filename;

B = foreach A ip を ip として生成し、SUBSTRING(domain, 0, 1) を domain_first_char, filename として生成します。

ダンプA;

B をダンプします。

B を図解してください。

B の作成中に、A から選択したフィールドのみを含めようとしています。ただし、B をダンプすると、「ts」フィールド (A の最初のフィールド) が B に表示され続けます。

A のダンプ:

(100,123.98.11.123,google.com,{(google)},20121201_G,20121201)

(95,500.98.11.123,yahoo.com,{(yahoo)},20121201_Y,20121201)

(107,123.98.11.123,google.com,{(google)},20121201_G,20121201)

(156,123.98.11.123,cnn.com,{(cnn)},20121201_C,20121201)

B のダンプ:

(100,g,20121201)

(95,y,20121201)

(107,g,20121201)

(156,c,20121201)

イラスト B:

ビ | ip:文字配列 | domain_first_char:文字配列 | ファイル名:文字配列

| | 123.98.11.123 | グラム | 20121202

ダンプ B に見られるように、(図 B のように) 最初のフィールドとして ip 値を出力する代わりに、ts フィールドを出力します。

4

1 に答える 1

0

インターネットを検索したところ、これはPigStorageのバグであり、回避策が見つかりました。

フラグでpigを開始すると、-t ColumnMapKeyPruneこの問題を修正するのに役立ちます。つまり、コマンドを使用してpigを開始しpig -x local -t ColumnMapKeyPrune sample.pigます。

ブタユーザーグループのReremiahRoundsに感謝します。

于 2013-02-04T21:06:12.417 に答える