hadoop - 摄取一组 JSON 对象并转换为表格数据

标签 hadoop hive apache-pig hdfs

我有一个这样的 JSON 对象数组。 [ 和 ] 封装的每个数组都在一行上。

[{"事件":0,"属性":{"颜色":"红色","连接类型":2}}{"事件":30,"属性":{"颜色": “蓝色”,“连接类型”:4}},{“事件”:45,“属性”:{“颜色”:“绿色”,“连接类型”:3}}] [{“事件”:0,“属性”:{“颜色”:“红色”,“连接类型”:5}}, {"event":1,"properties":{"color",:"blue","connectionType":6}}]

此处采用更易于阅读的格式。

[
    {"event":0, "properties":{"color":"red","connectionType":2}},
    {"event":3, "properties":{"color":"blue",'connectionType":4}},
    {"event":45, "properties":{"color":"green","connectionType":3}}
]
[
    {"event":0, "properties":{"color":"red","connectionType":5}},
    {"event":1, "properties":{"color":"blue","connectionType":6}}
]

有些事情需要注意,因此 [ ] 中的每个 JSON 对象都在一行中。每行中的对象数量各不相同。属性中的字段数量也各不相同。

对于这些数据,我想要的是获取每个 JSON 对象并将其转换为逗号分隔值或制表符分隔值形式的表格格式

| event    | color    | connectionType
  0          red        2
  3          blue       4

我查看了 PIG 用来读取 JSON 结构的一些工具 - 即 elephant-bird,但无法完全使用它来处理我的数据。

我希望获得有关替代解决方案或使用 elephant-bird/其他 pig json 解析器 的示例代码的指示。我的最终目标实际上只是捕获事件和属性的子集并将它们加载到 Hive 中。

最佳答案

在你的 json 文件中。你没有开始对象。所以它不区分行。我找到了解决方案,但我已将开始对象放入您的 json 对象中。

{"startObject":[{"event":0, "properties":{"color":"red","connectionType":2}},{"event":3, "properties":{"color":"blue","connectionType":4}},{"event":45, "properties":{"color":"green","connectionType":3}}]}

A = LOAD '/home/kishore/Data/Pig/pig.json' USING JsonLoader('{(event:chararray,properties: (color:chararray,connectionType:chararray))}');
B = foreach A generate Flatten($0);
C = foreach B generate $0,Flatten($1);
Dump C;

Result

(0,red,2)
(3,blue,4)
(45,green,3)

如果你想在不放置起始对象的情况下解析你的 json 对象,在这种情况下你应该编写你自己的自定义 UDF。 https://gist.github.com/kimsterv/601331

或者去找大象鸟 https://github.com/twitter/elephant-bird

关于hadoop - 摄取一组 JSON 对象并转换为表格数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32019408/

相关文章:

java - Archlinux上的Hadoop dfs无法启动| SSH端口22连接被拒绝

sql - 在配置单元中加入具有几乎相同模式的表

hadoop - PL/SQL 能否可靠地转换为 Pig Lating 或带有 Pig Latin 和 Hive 的 Oozie 管道

hadoop - 启动 Pig 作业时出现 oozie 错误

hadoop - 如何在 Apache pig 中使用 SimpleRandomSample

java - S3DistCp 作业失败 : -- dest doesn't match

java - 使用 Windows 10 和命令行启动 Hadoop 2.7.1 : ERROR the system cannot find the file hadoop

hadoop - 如何确定Hive中的动态分区数

java - 用Sqoop导出Hive表,有些行没有分隔

hadoop - Hiveserver2 无法在直线中打开新 session