我在hive中有这样的表结构:
id Name Age
1 A 26
1 B 26
我想将这些记录转换为对应于id的嵌套JSON,即对于每个id,我的代码应该将记录与它组合成一个JSON对象。
请帮助。
答案 0 :(得分:0)
您可以使用内置的Name
函数将Age
和named_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的collect
和to_json
UDF https://github.com/klout/brickhouse/wiki