首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用jsonloader为数组定义模式?

如何使用jsonloader为数组定义模式?
EN

Stack Overflow用户
提问于 2015-04-08 04:45:42
回答 1查看 302关注 0票数 0

我正在使用elephantbird项目将一个json文件加载到pig中。但我不确定如何在加载时定义模式。没有找到关于相同的描述。

数据:

代码语言:javascript
复制
{"id":22522,"name":"Product1","colors":["Red","Blue"],"sizes":["S","M"]}
{"id":22523,"name":"Product2","colors":["White","Blue"],"sizes":["M"]}

代码:

代码语言:javascript
复制
feed = LOAD '$INPUT' USING com.twitter.elephantbird.pig.load.JsonLoader() AS products_json;

extracted_products = FOREACH feed GENERATE
    products_json#'id' AS id,
    products_json#'name' AS name,
    products_json#'colors' AS colors,
    products_json#'sizes' AS sizes;

describe extracted_products;

结果:

代码语言:javascript
复制
extracted_products: {id: chararray,name: bytearray,colors: bytearray,sizes: bytearray}

如何给它们提供正确的模式(int、string、array、array),以及如何将数组元素展平为行?

提前感谢

EN

回答 1

Stack Overflow用户

发布于 2015-04-08 20:54:50

要将json数组转换为tuple:

代码语言:javascript
复制
feed = LOAD '$INPUT' USING com.twitter.elephantbird.pig.load.JsonLoader() AS products_json;

extracted_products = FOREACH feed GENERATE
products_json#'id' AS id:chararray,
products_json#'name' AS name:chararray,
products_json#'colors' AS colors:{t:(i:chararray)},
products_json#'sizes' AS sizes:{t:(i:chararray)};

展平元组

代码语言:javascript
复制
flattened = foreach extracted_products generate id,flatten(colors);
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29500998

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档