Pythonを使用してHiveを実装するUDFの例


主に2つの部分に分けられ、1つの部分はPythonスクリプトで実現したい機能を実現し、もう1つの部分はHQL部分で、Pythonスクリプトを呼び出してデータを処理します.
HQLがPython実装を呼び出すUDFには、データテーブルの列の列をPythonの標準入力にリダイレクトするリダイレクトプロセスがあり、行ごとに操作し、まず各行を指定された分割子で分け、一般的には't'、そして残りはそれを操作し、printが必要とする列を't'で分割する.
1、Python実現のUDFコード
/Users/nisj/PycharmProjects/EsDataProc/frist_udf.py
import sys
i = 0
for line in sys.stdin:
    line = line.strip()
    i += 1
    line = line + " hello udf!"
    print i,line

2、HQLがUDFを呼び出す--まずPythonファイルを追加する必要がある
add file pythonfile_location;--次にtransform(指定されたカラム)によって、指定されたカラムは処理するカラムです.
select transform(指定された列)using「python filename」as(newname)--newname出力された列の別名
select TRANSFORM(uid,appkey) USING 'python xx_udf.py' as (xx,appkey) from xx_uid_new_fristday_1208 limit 1000;
select TRANSFORM(uid,appkey,imei) USING 'python xx_udf.py' as (uid,appkey,imei) from xx_uid_new_fristday_1208 limit 1000;
drop table if exists xx_udf_1210;create table xx_udf_1210 as select TRANSFORM(uid,appkey) USING 'python xx_udf.py' as (xx,appkey) from xx_uid_new_fristday_1208 limit 10;

3、いくつかの説明add fileの後のパスは、Hdfs上のパスではなく、Hiveクライアントが存在するローカルファイルパスである.UDF関数をデバッグする場合は、Hiveクライアントを経由せずに【cat xx.txt|python udf.py】を使用できます.Hiveがpythonスクリプトに入力データは、't'で区切られているため、Pythonスクリプトは通過する.split('t')は区別する.INSERT OVERWRITEと組み合わせて上記のTRANSFORMを使用する場合がありますが、ターゲットテーブルは、その分割サブがtではない可能性があります.でも覚えておいてください.
TRANSFORMの分割記号は、スクリプトを転送、転送するものであり、永遠にtである.