3

我是 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 的字段?

4

3 回答 3

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。

于 2013-06-13T07:42:30.710 回答
1

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

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

于 2014-07-14T04:23:33.470 回答
1

C = 使用 JsonLoader('firstName:chararray,lastName:chararray,age:int,address:(streetAddress:chararray,city:chararray,state:chararray,postalCode:chararray), phoneNumber:{(type:chararray,数字:字符数组)}')

于 2017-08-17T07:36:24.943 回答