Pig 默认 JsonLoader 架构问题

Posted

技术标签:

【中文标题】Pig 默认 JsonLoader 架构问题【英文标题】:Pig default JsonLoader schema issue 【发布时间】:2014-01-12 15:36:40 【问题描述】:

我有以下需要使用 Pig 解析的数据

数据


    "Name": "BBQ Chicken",
    "Sizes": [
         "Size": "Large", "Price": 14.99 ,
         "Size": "Medium", "Price": 12.99 
    ],
    "Toppings": [ "Barbecue Sauce", "Chicken", "Cheese" ]

我能够为NameSizes 定义架构,但我无法让Toppings 工作。在这里寻求帮助。

脚本

data = LOAD '/user/hue/data/nested_json_pizza_sample_data.json'
       USING JsonLoader('Name:chararray,
                         Sizes:bagtuple(Size:chararray, Price:float),
                         Toppings:tuple(a:chararray)');
DUMP data;

输出

如下所示,Topping 的数据没有被解析。

(BBQ Chicken,(Large,14.99),(Medium,12.99),)
(Hawaiian,(Large,12.99),(Medium,10.99),)
(Vegetable,(Large,12.99),(Medium,10.99),)
(Pepperoni,(Large,12.99),(Medium,10.99),(Small,7.49),)
(Cheese,(Large,10.99),(Medium,9.99),(Small,5.49),)
data: Name: chararray,Sizes: (Size: chararray,Price: float),Toppings: (a: chararray)

【问题讨论】:

【参考方案1】:

这里有两个选择:如果数组中的项目数未知。

Toppings:t:(i:chararray)

或者如果元素的数量始终相同。

Toppings: (i: chararray, j: chararray, k: chararray)

会给你输出:

(BBQ Chicken,(Large,14.99),(Medium,12.99),)

【讨论】:

我试过 Toppings:t:(i:chararray) 但输出与我在原始帖子中显示的相同。由于浇头不固定,我不能使用第二个选项,但我也试过了,输出是一样的。 这很奇怪,因为我在本地尝试过并且得到了答案中给出的输出 你能分享一下你正在使用哪个版本的猪,而且你是从 grunt 运行它的吗?您使用的是 Cloudera 或 Hortonworks 的沙箱。我遇到的问题是 Hortonworks 沙盒 2。 Apache Pig 版本 0.12.0 (r1529718) 和 Hadoop 1.2.1 在伪 dist 模式下运行。

以上是关于Pig 默认 JsonLoader 架构问题的主要内容,如果未能解决你的问题,请参考以下文章

如何在 pig 中使用 JsonLoader 加载数据

Pig Job 使用 Elephant Bird jsonLoader 时挂起

在 Pig 中解析复杂的 JSON 字符串

Apache PIG,JSON 加载器

猪。 json加载器。加载没有架构的嵌套对象

猪 JsonLoader() 错误?