2015-09-29 62 views
0

背景Hive UDAF:如何实现每种方法?


我有一个输入表如下所示:

input_table

我想要做的是排序的weight每个name每个idtype,然后保留前10名和相应的权重,将它们转换为字符串并连接它们。 我的输出表应该是这样的: output_table


分析


如果我写一个映射精简程序,地图键应该idtypenameweight应该是地图的价值。在reducer中,我可以使用HashMaptype作为K,nameweight作为V,然后执行一些排序和字符串连接以实现我的目标。


问题


但现在我需要写一个UDAF,并用它来与group by id做到这一点。我是UDAF的新手,我想知道每种方法(inititeratemergeterminate)我应该怎么做? init设置输出字段吗?哪个部分应该进行分类?哪部分应该做字符串连接?

+0

嘿安娜贝尔 - 不知道这是否有帮助,但我写了一个可能有用的UDAF函数指南 - https://blog.matthewrathbone.com/2015/07/27/ultimate-guide-to-writing-自定义功能换hive.html –

回答

0

init方法中,我们可以声明输出hashmap。

iterate方法中,我们可以迭代映射的值,并使用关系运算符进行连接和排序。

Terminatepartial用于作业在不同数据节点上分割和运行时使用。

Merge函数在需要合并从所有数据节点计算出的所有结果时被调用。

Terminate函数终止聚合并返回最终结果。