0

何らかの処理を行うために PIG を使用して非構造化データを構造化しようとしています。

データのサンプルは次のとおりです。

Nov 1   18:23:34    dev_id=03   user_id=000 int_ip=198.0.13.24  ext_ip=68.67.0.14   src_port=99 dest_port=213   response_code=5

期待される出力:

Nov 1 18:23:34, 03 , 000, 198.0.13.24, 68.67.0.14, 99, 213, 5

データが適切に区切られていないことがわかります (タブやコンマなど)。そのため、「\t」を使用してデータをロードしようとし、ターミナルにダンプしました。

A = LOAD '----' using PigStorage('\t') as (mnth: chararray, day: int, --------);

dump A;

Store A into '\root\output';

出力:

ダンプ出力:

(Nov,1,18:23:34,dev_id=03,user_id=000,int_ip=198.0.13.24,ext_ip=68.67.0.14,src_port=99,dest_port=213,response_code=5)

Store oputut: 結果は、ダンプ (カンマ区切り) としてではなく、入力と同じように保存されます。

Nov 1   18:23:34    dev_id=03   user_id=000 int_ip=198.0.13.24  ext_ip=68.67.0.14   src_port=99 dest_port=213   response_code=5

代替案: DataStorage() as (value: varchar) を使用してデータをロードしようとしましたが、TOKENIZE も実行しましたが、目的を達成できませんでした。

私が必要とするいくつかの提案:

  1. 月:「11月」、日:「1」、時間:「18:23:34」として3つのフィールドを保存したため。「11 月 1 日 18:23:34」という 3 つのフィールドすべてを時刻として結合することは可能ですか。

  2. すべてのデータは dev_id=03、user_id=000 などの情報とともに保存されますが、情報を削除して 03,000,198.0.13.24 などの情報を保存する必要があります。

PIG を使用してすべての処理を行うことは可能ですか、それとも MapReduce プログラムを作成する必要がありますか。

編集:1

コメントを受け取った後、正常に動作する単一の列に対して REGEX_EXTRACT を試しました。複数の列の場合、次のように REGEX_EXTRACT_ALL を試しました。

A = LOAD '----' using PigStorage('\t') as (mnth: chararray, day: int, dev: chararray, user: chararray --------);

B = foreach A generate REGEX_EXTRACT_All(devid, userid, '(^.*=(.*)$) (^.*=(.*)$)');

Dump B;

エラーが発生しました:

Error: ERROR org.apache.pig.tools.grunt.Grunt - ERROR 1070: Could not resolve REGEX_EXTRACT_All using imports.

REGEX_EXTRACT_All を使用して複数のフィールドを抽出できますか。

4

2 に答える 2