我想使用Python对Hive中的聚合列(一个接一个组)进行一些聚合工作。我发现联非新议程就是为此目的而存在的。我只能找到一个Java示例。有用Python编写的例子吗?
或者对于python来说,UDF和联非新议程没有什么区别?对于联非新议程,我只需要把它写得像个减速机?请给我建议。
发布于 2014-12-15 22:16:26
您可以使用Hive的流式UDF功能(TRANSFORM)来使用Python,它从stdin读取并输出到stdout。您还没有找到任何Python " UDAF“示例,因为UDAF引用了您扩展的Hive类,因此它只在Java中。
当使用流UDF时,Hive将选择是启动还是映射,还是减少作业,因此不需要指定(有关此功能的更多信息,请参见此链接:https://cwiki.apache.org/confluence/display/Hive/LanguageManual+Transform)。
基本上,您的实现将是编写一个python脚本,该脚本从stdin读取,计算一些聚合数并将其输出到stdout。要在Hive中实现,请执行以下操作:
1)首先将python脚本添加到Hive中的资源库中,以便在集群中分发:
add file script.py;2)然后调用转换函数并输入要聚合的列。下面是一个示例:
select transform(input cols)
using 'python script.py' as (output cols)
from table
;取决于您需要做什么,您可能需要一个单独的映射程序和还原脚本。如果您需要基于列值进行聚合,请记住在映射阶段按语法使用Hive的集群/按语法分发,以便将分区数据发送到还原器。
如果这有帮助的话请告诉我。
https://stackoverflow.com/questions/27391006
复制相似问题