4

主に TSV (タブ区切り値) であるスキーマを使用してファイルをロードしようとしていますが、フィールドの 1 つが JSON 値です。pig latin には、タブ (またはその他) で区切られた値用の TextLoader と、JSON 用の JsonLoader があるようです...

特に、データの各行は次のようになります。

date\tevent_name\tevent_details\n

ここで、event_details は JSON 形式の文字列です。他のものは単なる char 配列です。

このデータをロードする最も簡単な方法は何ですか?

注: 私はピッグ バージョン 0.11.1 を使用しています。

4

2 に答える 2

10

(たくさんの調査を行った後、ここに答えがあります:)

登録コマンドに必要なライブラリをhttp://mvnrepository.com/からダウンロードします。

豚のスクリプトは次のようになります。

register 'libs/elephant-bird-core-4.1.jar';
register 'libs/elephant-bird-pig-4.1.jar';
register 'libs/guava-14.0.1.jar';
register 'libs/json-simple-1.1.1.jar';
register 'libs/piggybank.jar';

define decode_json com.twitter.elephantbird.pig.piggybank.JsonStringToMap();

e1 = load '$filename' using PigStorage() as (
    date: chararray,
    event_name: chararray,
    event_details_str: chararray,
);

-- Remove the header row:
e2 = filter e1 by not date matches '.*DATE';

-- Convert the event_details from a JSON string to a map:
events = foreach e2 generate *, decode_json(event_details_str) as event_details;
于 2013-08-16T19:04:23.370 に答える