PIG中的MultiLevel JSON

时间:2012-06-17 20:02:30

标签: apache-pig

我是PIG脚本和使用JSON的新手。我需要解析PIG中的多级json文件。说,

{
     "firstName": "John",
     "lastName" : "Smith",
     "age"      : 25,
     "address"  :
     {
         "streetAddress": "21 2nd Street",
         "city"         : "New York",
         "state"        : "NY",
         "postalCode"   : "10021"
     },
     "phoneNumber":
     [
         {
           "type"  : "home",
           "number": "212 555-1234"
         },
         {
           "type"  : "fax",
           "number": "646 555-4567"
         }
     ]
 }

我能够通过JsonLoader()解析单个级别的json,并进行连接和其他操作,并获得所需的结果,如JsonLoader('name:chararray,field1:int .....'); 是否可以使用PIG 0.10.0的内置JsonLoader()函数解析上面提到的JSON文件。如果是。请解释一下如何完成它并访问特定JSON的字段?

3 个答案:

答案 0 :(得分:3)

您可以使用Twitter的Elephant Bird处理嵌套的json加载:https://github.com/kevinweil/elephant-bird

a = LOAD 'file3.json' USING com.twitter.elephantbird.pig.load.JsonLoader('-nestedLoad')

这会将JSON解析为地图http://pig.apache.org/docs/r0.11.1/basic.html#map-schema,JSONArray会被解析为地图的DataBag。

答案 1 :(得分:1)

可以通过创建自己的UDF来实现。一个简单的UDF示例显示在下面的链接

http://pig.apache.org/docs/r0.9.1/udf.html#udf-java

答案 2 :(得分:0)

C = load' path'使用JsonLoader(' firstName:chararray,lastName:chararray,age:int,address :( streetAddress:chararray,city:chararray,state:chararray,postalCode:chararray), 电话号码:{(类型:chararray,编号:chararray)}&#39)