json - 将具有不同模式的 json 加载到 PIG 中

标签 json schema apache-pig

我遇到了将一组 json 文档加载到 PIG 中的问题。
我拥有的是很多 json 文档,它们的字段各不相同,我需要的字段在大多数文档中,而在缺少的情况下,我想获得空值。

我刚刚下载并编译了最新的 Pig 版本(直接来自 apache git 存储库的 0.12)只是为了确保这还没有解决。

我有一个像这样的json文档:

{"foo":1,"bar":2,"baz":3}

当我使用这个将它加载到 PIG 中时
Json1 = LOAD 'test.json' USING JsonLoader('foo:int,bar:int,baz:int');
DESCRIBE Json1;
DUMP Json1;

我得到了预期的结果
Json1: {foo: int,bar: int,baz: int}
(1,2,3)

但是,当字段在架构中的顺序不同时:
Json2 = LOAD 'test.json' USING JsonLoader('baz:int,bar:int,foo:int');
DESCRIBE Json2;
DUMP Json2;

我得到了一个不想要的结果:
Json2: {baz: int,bar: int,foo: int}
(1,2,3)

那应该是
(3,2,1)

显然,模式定义中的字段名称与 json 中的字段名称无关。

我需要的是将特定字段从 json 文件(带有嵌入的文档!)加载到 PIG 中。

我该如何解决?

最佳答案

我认为即使是最新版本的 Pig 也是一个已知问题,因此除了使用功能更强大的 JsonLoader 之外,没有其他简单的方法可以解决这个问题。

使用 Elephant Bird JSONLoader相反,它将按照您期望的方式运行 - 换句话说,尊重字段顺序。

关于json - 将具有不同模式的 json 加载到 PIG 中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15396550/

相关文章:

hadoop - pig 忽略 maxReducers 并使用 mapred.reduce.tasks 代替

hadoop - 从袋子里取出一个元组

java - 使用数据文件进行 Junit 测试

ios - 如何将 NSCFArray(可能是 JSON)序列化为 NSDictionary?

java - 在 Struts 中将 JSON 字符串写入 Printwriter 时出现 ArrayIndexOutOfBoundsException

apache-spark - 如何在 spark 中将 Avro Schema 对象转换为 StructType

jpa - 管理@NamedNativeQuery 和模式

oracle - 如何在 Hibernate Spring 中访问特定模式?

javascript - 如何加载配置json作为环境变量nodejs

hadoop - Apache Pig-从RCFiles存储和加载