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" ]
我能够为Name
和Sizes
定义架构,但我无法让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 架构问题的主要内容,如果未能解决你的问题,请参考以下文章