0

既存のスクリプトは、行ごとに JSON オブジェクトの配列を含むテキスト ファイルを作成します。

[{"foo":1,"bar":2},{"foo":3,"bar":4}]
[{"foo":5,"bar":6},{"foo":7,"bar":8},{"foo":9,"bar":0}]
…

このデータを Pig にロードして、配列を展開し、個々のオブジェクトを処理したいと思います。

私は、Twitter のElephant Birdで JsonLoader を使用して役に立たないことを確認しました。JSON については問題ありませんが、次のコマンドを実行すると「0 レコードの読み取りに成功しました」というメッセージが表示されます。

register '/tmp/elephant-bird/core/target/elephant-bird-core-4.3-SNAPSHOT.jar';
register '/tmp/elephant-bird/hadoop-compat/target/elephant-bird-hadoop-compat-4.3-SNAPSHOT.jar';
register '/tmp/elephant-bird/pig/target/elephant-bird-pig-4.3-SNAPSHOT.jar';
register '/usr/local/lib/json-simple-1.1.1.jar';

a = load '/path/to/file.json' using com.twitter.elephantbird.pig.load.JsonLoader('-nestedLoad=true');
dump a;

また、ファイルを通常どおりロードし、各行を単一列のchararrayを含むものとして扱い、それをJSONとして解析しようとしましたが、うまくいくように見える既存のUDFが見つかりません.

何か案は?

4

1 に答える 1

1

Donald が言ったように、ここでは UDF を使用する必要があります。ここXplentyでは、ElephantBirdのJsonStringToMapを補完するためにJsonStringToBagを書きました。

于 2014-05-26T18:05:14.067 に答える