2024-06-25 23:04:43 发布
网友
我想使用Python对Hive中的聚合列(groupby之后)做一些聚合工作。我发现这里面有UDAF。我只能找到一个Java示例。有没有用Python编写的例子?在
或者对于python,UDF和UDAF之间没有区别?对于UDAF,我只需要像写减缩器一样编写它?请告知。在
您可以利用Hive的流式UDF功能(TRANSFORM)来使用Python UDF,该UDF从stdin读取并输出到stdout。您还没有找到任何Python“UDAF”示例,因为UDAF引用了您扩展的Hive Java类,因此它只能在Java中使用。在
当使用流式UDF时,配置单元将选择是启动还是映射或减少作业,因此不需要指定(有关此功能的详细信息,请参阅此链接:https://cwiki.apache.org/confluence/display/Hive/LanguageManual+Transform)。在
基本上,您的实现将是编写一个python脚本,该脚本从stdin读取,计算一些聚合数并将其输出到stdout。要在配置单元中实现,请执行以下操作:
1)首先将python脚本添加到配置单元中的资源库中,以便它在集群中分布:
add file script.py;
2)然后调用转换函数并输入要聚合的列。下面是一个例子:
根据需要执行的操作,可能需要单独的mapper和reducer脚本。如果需要基于列值进行聚合,请记住在mapper阶段使用Hive的CLUSTER-BY/DISTRIBUTE-BY语法,以便将分区的数据发送到reducer。在
如果有帮助,请告诉我。在
您可以利用Hive的流式UDF功能(TRANSFORM)来使用Python UDF,该UDF从stdin读取并输出到stdout。您还没有找到任何Python“UDAF”示例,因为UDAF引用了您扩展的Hive Java类,因此它只能在Java中使用。在
当使用流式UDF时,配置单元将选择是启动还是映射或减少作业,因此不需要指定(有关此功能的详细信息,请参阅此链接:https://cwiki.apache.org/confluence/display/Hive/LanguageManual+Transform)。在
基本上,您的实现将是编写一个python脚本,该脚本从stdin读取,计算一些聚合数并将其输出到stdout。要在配置单元中实现,请执行以下操作:
1)首先将python脚本添加到配置单元中的资源库中,以便它在集群中分布:
2)然后调用转换函数并输入要聚合的列。下面是一个例子:
^{pr2}$根据需要执行的操作,可能需要单独的mapper和reducer脚本。如果需要基于列值进行聚合,请记住在mapper阶段使用Hive的CLUSTER-BY/DISTRIBUTE-BY语法,以便将分区的数据发送到reducer。在
如果有帮助,请告诉我。在
相关问题 更多 >
编程相关推荐