将多个记录从Hive表转换为嵌套的JSON

时间:2015-07-27 06:00:19

标签: java json hive

我在hive中有这样的表结构:

id  Name    Age
1    A      26
1    B      26

我想将这些记录转换为对应于id的嵌套JSON,即对于每个id,我的代码应该将记录与它组合成一个JSON对象。

请帮助。

1 个答案:

答案 0 :(得分:0)

您可以使用内置的Name函数将Agenamed_struct组合到一个结构中,例如:

named_struct("Name", Name, "Age", Age)

但是,为了通过公共id将它们聚合在一起,您需要一个聚合函数。 Hive中的所有内置聚合函数都不提供您所需的功能。这意味着您可能需要编写自定义聚合函数(UDAF)才能实现目标。该函数将使用如下:

select id, custom_aggregation_function(named_struct("Name", Name, "Age", Age)) from table group by id;

有关编写自己的UDAF的更多信息,请查看此处 https://cwiki.apache.org/confluence/display/Hive/GenericUDAFCaseStudy

或者,您可以查找所需的其他第三方UDAF实现。

查看来自Brickhouse的collectto_json UDF https://github.com/klout/brickhouse/wiki