5

Pig プログラムを介して Amazon の Elastic Map Reduce を使用して、サービスによって生成されたタブ区切りのデータ ファイルを解析しようとしています。すべてのデータ ファイルに、各列の目的を定義するヘッダー行が含まれていることを除けば、うまくいっています。明らかに、(文字列) ヘッダーは数値データ値にキャストできないため、Pig から次のような警告が表示されます。

2011-03-17 22:49:55,378 [main] WARN  org.apache.pig.backend.hadoop.executionengine.mapReduceLayer.PigHadoopLogger - org.apache.pig.builtin.PigStorage: Unable to interpret value [<snip>] in field being converted to double, caught NumberFormatException <For input string: "headerName"> field discarded

load ステートメントの後にフィルターを使用して、後でヘッダー行を操作しないようにします (ヘッダー用語をフィルター処理することにより) が、潜在的なマスキングを避けるために警告ノイズを取り除きたい問題 (適切にキャストされない実際のデータ フィールドなど)。

これは可能ですか?

4

3 に答える 3

3

UDF の記述に慣れていない場合の別のオプションは、次のようなものです。

サンプルデータ:

MyIntVal
123
456

脚本:

A = load 's3://blah/myFile' USING PigStorage() as (myintval: chararray);

B = filter A by myintval neq 'MyIntVal';

C = foreach B generate (int)$0;

これにより、ヘッダー行が除外され、残りの値が int にキャストされます。

これが最善の方法であるとは言いませんが、状況に合う場合は非常に簡単な別のオプションです。

于 2013-04-25T18:50:51.240 に答える
0

これはあなたの結果を得るのに役立つかもしれません:-

input_file = load 'input' using PigStorage(',') as (row1:chararay, row2:chararray);
ranked = rank input_file;
/* ranked:{rank_input_file:long, row1:chararay, row2:chararay} */
NoHeader = filter ranked by (rank_input_file > 1);
New_input_file = foreach NoHeader generate row1, row2;
于 2015-07-02T17:35:21.377 に答える
0

(可能であれば) Pig ジョブを送信する前に実行するか、特定の条件が満たされた場合に null 値を出力する UDF を作成してみてください。これにより、後でこれを除外できます。

于 2011-04-07T11:37:21.437 に答える