19

s3には、b、c、iの3種類のログ行を持つgzip圧縮されたログファイルがたくさんあります。iとcは両方ともシングルレベルのjsonです:

{"this":"that","test":"4"}

タイプbは深くネストされたjsonです。私はこの要点に出くわし、これを機能させるためにjarをコンパイルすることについて話しました。私のJavaスキルは優れたものではないので、ここから何をすべきか本当にわかりませんでした。

{"this":{"foo":"bar","baz":{"test":"me"},"total":"5"}}

タイプiとタイプcは常に同じ順序であるとは限らないため、これにより、生成正規表現ですべてを指定することが困難になります。PigでJSON(gzipファイル)を処理することは可能ですか?Amazon ElasticMapReduceインスタンスに基づいて構築されたPigのバージョンを使用しています。

これは2つの質問に要約されます:1)PigでJSONを解析できますか(もしそうなら、どのように)?2)(gzipで圧縮されたログファイルから)JSONを解析できる場合、ネストされたJSONオブジェクトを解析できますか?

4

7 に答える 7

17

Pig 0.10には、JsonStorageとJsonLoader()が組み込まれています。

jsonロード/ストアの豚のドキュメント

于 2012-07-03T22:00:44.443 に答える
8

多くの回避策と作業を経て、私はこれを成し遂げるために答えることができました。私はこれを行う方法についてブログにそれについての記事を書きました。ここから入手できます:http://eric.lubow.org/2011/hadoop/pig-queries-parsing-json-on-amazons-elastic-map-reduce-using-s3-data/

于 2011-03-01T21:30:08.527 に答える
5

PigにはJSONローダーが付属しています。ロードするには、次を使用します。

A = LOAD'data.json' <br> USING PigJsonLoader();

保存するには、次を使用できます。

STORE INTO ‘output.json’ 
    USING PigJsonLoader();

ただし、GZIPされたデータをサポートしているかどうかはわかりません。

于 2011-02-24T11:53:23.970 に答える
3

これを試してください:https ://github.com/ab/elephant-bird

于 2011-12-27T19:45:51.643 に答える
2

JsonLoaderを使用してそれを行うことができます...しかし、jsonデータのスキーマについて言及する必要があります。そうしないと、エラーが発生する可能性があります。以下のリンクをたどってください。

         http://joshualande.com/read-write-json-apache-pig/

UDFを作成して解析することもできます...

于 2014-07-03T10:49:10.183 に答える
0

ツイッターのエレファントバードjsonローダーで試してみることができます。jsonデータを動的に処理します。ただし、スキーマは非常に正確である必要があります。

api_data =LOAD'ファイル名'USINGcom.twitter.elephantbird.pig.load.JsonLoader('-nestedLoad');

于 2015-09-09T20:44:46.510 に答える
0

Twitter elephantbirdの使用が大幅に増加し、PIGでのjson解析のgotoライブラリになりつつあります。

例 :

DEFINE TwitterJsonLoader com.twitter.elephantbird.pig.load.JsonLoader('-nestedLoad=true ');

JsonInput = LOAD 'input_path' USING TwitterJsonLoader() AS (entity: map[]);

InputObjects = FOREACH JsonInput GENERATE (map[]) entity#'Object' AS   JsonObject;

InputIds = FOREACH InputObjects GENERATE JsonObject#'id' AS id;
于 2016-02-29T23:22:03.253 に答える