【问题标题】:Loading Raw JSON into Pig将原始 JSON 加载到 Pig 中
【发布时间】:2012-09-20 14:20:07
【问题描述】:

我有一个文件,其中每一行都是一个 JSON 对象(实际上,它是 stackoverflow 的转储)。我想尽可能轻松地将其加载到 Apache Pig 中,但我无法弄清楚如何告诉 Pig 输入格式是什么。这是一个条目的示例,

{ 
"_id" : { "$oid" : "506492073401d91fa7fdffbe" }, 
"Body" : "....", 
"ViewCount" : 7351, 
"LastEditorDisplayName" : "Rich B", 
"Title" : ".....", 
"LastEditorUserId" : 140328, 
"LastActivityDate" : { "$date" : 1314819738077 }, 
"LastEditDate" : { "$date" : 1313882544213 }, 
"AnswerCount" : 12, "CommentCount" : 19, 
"AcceptedAnswerId" : 7, 
"Score" : 83, 
"PostTypeId" : "question", 
"OwnerUserId" : 8, 
"Tags" : [ "c#", "winforms" ], 
"CreationDate" : { "$date" : 1217540572667 }, 
"FavoriteCount" : 13, "Id" : 4, 
"ForumName" : "stackoverflow.com" 
}

有没有一种方法可以将每行都是上述之一的文件加载到 Pig 中,而无需手动指定架构?或者也许是一种基于在所有对象中观察到的(可能是嵌套的)键自动生成模式的方法?如果我确实需要手动指定架构,架构字符串会是什么样子?

谢谢!

【问题讨论】:

    标签: json hadoop schema apache-pig


    【解决方案1】:

    快速简便的方法:使用 Twitter 的大象鸟项目。内部是一个名为com.twitter.elephantbird.pig.load.JsonLoader 的加载程序。像这样直接使用时,

    A = LOAD '/path/to/data.json' USING com.twitter.elephantbird.pig.load.JsonLoader() as (json:map[]);
    B = FOREACH A GENERATE json#'fieldName' AS field_name;
    

    不会加载嵌套元素。但是,您可以通过将其更改为,轻松解决该问题(如果需要),

    A = LOAD '/path/to/data.json' USING com.twitter.elephantbird.pig.load.JsonLoader('-nestedLoad')
    

    包含大象鸟很容易——只需使用 Maven(或等效的)依赖管理器将项目“elephant-bird”与组织“com.twitter.elephantbird”一起拉出,然后在 pig 中发出通常的register 命令

    register 'lib/elephantbird.jar';
    

    【讨论】:

    猜你喜欢
    • 2014-12-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-03-02
    • 2023-03-23
    • 1970-01-01
    • 2022-07-23
    • 2021-10-06
    相关资源
    最近更新 更多