因为项目需要,最近研究了一下如何用python写udf;
-
python部分:(通过stdin和stdout进行数据交互)
#!/usr/bin/python import sys for line in sys.stdin: print(...)
-
将写好的脚本上传到HDFS:
$ hadoop fs -put -f xxx.py [PATH]
-
在HIVE上:
ADD FILE hdfs:///[PATH]; set hive.execution.engine=mr; SELECT TRANSFORM(...) USING 'python jr_collect_list_udf.py' AS (...) FROM ...
-
P.S.:
- 在python脚本中,接收到的数据为str类型,如果TRANSFROM(…)中有多个字段,则接收到的是用\t分隔的字符串;
- 无论返回的是什么类型的数据,写在表里都是str;
- 需要返回多个字段的话在return时用\t.join()就可以;