Maz*_*Maz 7 java json hadoop elephantbird
我需要摄取大型JSON文件,其记录可能跨越多行(而不是文件)(完全取决于数据提供者如何编写它).
Elephant-Bird假设LZO压缩,我知道数据提供者不会这样做.
Dzone文章http://java.dzone.com/articles/hadoop-practice假设JSON记录将在同一行.
任何想法,除了压缩JSON ...文件将是巨大的...如何正确分割文件,使JSON不会破坏.
编辑:行,而不是文件
如果没有任何其他建议,并且取决于 JSON 的格式化方式,您可能有一个选择。
正如 Dzone 文章中指出的,问题在于 JSON 没有结束元素,当您跳转到分割点时可以轻松找到该结束元素。
现在,如果您的输入 JSON 具有“漂亮”或标准格式,您可以在自定义输入格式实现中利用这一点。
例如,从 Dzone 示例中获取示例 JSON:
{
"results" :
[
{
"created_at" : "Thu, 29 Dec 2011 21:46:01 +0000",
"from_user" : "grep_alex",
"text" : "RT @kevinweil: After a lot of hard work by ..."
},
{
"created_at" : "Mon, 26 Dec 2011 21:18:37 +0000",
"from_user" : "grep_alex",
"text" : "@miguno pull request has been merged, thanks again!"
}
]
}
Run Code Online (Sandbox Code Playgroud)
使用这种格式,您知道(希望?)每个新记录都从具有 6 个空格和一个开括号的行开始。记录以类似的格式结束 - 6 个空格和一个右括号。
因此,在这种情况下,您的逻辑是:消耗行,直到找到包含 6 个空格和一个左括号的行。然后缓冲内容,直到找到 6 个空格和一个右括号。然后使用任何您想要将其转换为 java 对象的 JSON 反序列化器(或者只是将多行文本传递给您的映射器。
归档时间: |
|
查看次数: |
3725 次 |
最近记录: |