【问题标题】:Loading json with varying schema into PIG将具有不同模式的 json 加载到 PIG 中
【发布时间】:2013-03-02 01:13:33
【问题描述】:

我在将一组 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)

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

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

我该如何解决这个问题?

【问题讨论】:

  • 不幸的是,JsonLoader 会按原样加载字段,而不管您设置的架构。

标签: json schema apache-pig


【解决方案1】:

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

请改用Elephant Bird JSONLoader,这将按照您的预期行事 - 换句话说,尊重字段顺序。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-12-29
    • 2012-09-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-12-12
    • 2023-04-06
    • 2019-08-18
    相关资源
    最近更新 更多