2

私は HADOOP と pig にかなり慣れていません。

そう 。単一行のjsonファイルがあり、すべて同じスキーマを持っています:

{"name":"someName","pkg":[{"F1":"abc","F2":"44","F3":"xyz","F4":1024,"info":
[{"timestamp":1372631550000,"value":"122","id":"nnn","name":"ppp"}, 
{"timestamp":1372649240000,"value":"222","id":"ggg","name":"qqq"}]} ,
{"F1":"abc","f2":"44","F3":"xyz","F4":1024,"new":[{"type":"event1", "time":1372537000000,"more":"
{\"bbad\":\"HELLO\",\"is_done\":0,\"ssss\":-128}"}]}]}

エレファントバードを使用して、すべての json ファイルをロードします。

data = LOAD 'browsers/gzip' USING com.twitter.elephantbird.pig.load.JsonLoader('-nestedLoad') as (json:map[]);

これまでのところ、私のために働いている唯一のことは、バイト配列を返す「名前」フィールドを照会することです。

b = foreach data generate json#'name' as name

次に、代わりにマップに変換しようとします:

c = FOREACH data GENERATE json#'name' as (m:map[]);
DESCRIBE c;

そして得る

c: {tuple_0: (m:map[])}

データは次のようになります。

({([F1#"abc",F2#44...])})

そのため、pkg.F1 = "abc" を持つすべてのもの、または pkg.info.value = 122 などを持つすべてのものをフィルタリングする必要があります。

どうすればいいのですか?

私はすでにそれをたくさんグーグルで検索したので、コード例は非常に役に立ちます。

ありがとう

4

2 に答える 2

1

これを試して

c = FOREACH data GENERATE flatten(json#'name') as (m:map[]);
于 2014-01-22T16:29:41.733 に答える