【问题标题】:Pig JsonLoader() bug?猪 JsonLoader() 错误?
【发布时间】:2015-04-07 14:18:06
【问题描述】:

我正在尝试用 pig 加载一个 json 文件。我可以成功加载文件,但是我发现了一个错误。

schema:
id,name,brand,color

数据:

{"id":2561,"name":"abc","brand":"Levis","color":"Blue"}
{"id":2562,"brand":"Adidas","color":"Black"}
{"id":2563,"name":"edf","brand":"Nike","color":"White"}

代码:

raw = LOAD '$INPUT_PATH' USING JsonLoader('
id:chararray,
name:chararray,
brand:chararray,
color:chararray
');

x = foreach raw generate id,brand;
dump x;

如果特定的 raw 不包含架构中定义的所有字段,则结果是错误的:(第二个 raw 应该是 Adidas 而不是黑色)

(2561,Levis)
(2562,Black)
(2563,Nike)

上面有什么解决方法吗?

提前致谢

【问题讨论】:

    标签: json apache-pig


    【解决方案1】:

    我建议您使用elephantbird 而不是JsonLoaderElephantbird 将以key/value pair(i.e map) 的形式存储输入 json,即使输入 json 中缺少某些字段,也可以轻松提取所需字段。

    下载两个jar文件(elephant-bird-pig-4.1.jarelephant-bird-hadoop-compat-4.1.jar)并尝试以下方法。

    input.json

    {"id":2561,"name":"abc","brand":"Levis","color":"Blue"}
    {"id":2562,"brand":"Adidas","color":"Black"}
    {"id":2563,"name":"edf","brand":"Nike","color":"White"}
    

    PigScript:

    REGISTER /tmp/elephant-bird-pig-4.1.jar;
    REGISTER /tmp/elephant-bird-hadoop-compat-4.1.jar;
    
    A = LOAD 'input.json' USING com.twitter.elephantbird.pig.load.JsonLoader() AS myMap;
    B = FOREACH A GENERATE myMap#'id' AS ID,myMap#'brand' AS brand;
    DUMP B;
    

    输出:

    (2561,Levis)
    (2562,Adidas)
    (2563,Nike)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-02-20
      • 1970-01-01
      • 2023-04-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-03-08
      相关资源
      最近更新 更多