gpt4 book ai didi

json - 将原始 JSON 加载到 Pig 中

转载 作者:可可西里 更新时间:2023-11-01 14:20:44 27 4
gpt4 key购买 nike

我有一个文件,其中每一行都是一个 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 中,而无需手动指定模式?或者也许是一种基于在所有对象中观察到的(可能嵌套的)键自动生成模式的方法?如果我确实需要手动指定架构,架构字符串应该是什么样的?

谢谢!

最佳答案

快速简便的方法:使用 Twitter 的 elephantbird 项目。里面是一个名为 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')

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

register 'lib/elephantbird.jar';

关于json - 将原始 JSON 加载到 Pig 中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12644392/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com