私は 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 などを持つすべてのものをフィルタリングする必要があります。
どうすればいいのですか?
私はすでにそれをたくさんグーグルで検索したので、コード例は非常に役に立ちます。
ありがとう