使用Python實現Hive的UDF示例

2021-07-25 07:19:28 字數 1105 閱讀 9550

主要分為兩個部分,乙個部分為python指令碼實現想要實現的功能,另外乙個部分為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指輸出的列的別名

3、幾個說明

add file後面的路徑是hive客戶端所在的本地檔案路徑,而非hdfs上的路徑。

udf函式除錯的時候,可以使用【cat xx.txt|python udf.py】的方式,不用經過hive客戶端。

hive傳入python指令碼中的資料,是通過'\t'來分隔的,所以python指令碼用通過.split('\t')來區分開;有時候,我們結合insert overwrite使用上述transform,而目標表,其分割副可能不是\t。但是請牢記:

transform的分割符號,傳入、傳出指令碼的,永遠是\t。

hive使用rank實現topN的查詢

前置條件 安裝好hive 背景 hive表中存有cookieid和time兩個字段 目標 通過rank方法查出每個cookieid在哪一天的次數最多 具體步驟如下 create external table tmp dh topn cookieid string,vtime string day r...

hive使用rank實現topN的查詢

前置條件 安裝好hive 背景 hive表中存有cookieid和time兩個字段 目標 通過rank方法查出每個cookieid在哪一天的次數最多 具體步驟如下 一 建立表 create external table tmp dh topn cookieid string,vtime string...

hive的基本使用

大資料平台架構 基於hadoop的乙個資料倉儲工具,構建於hadoop的hdfs和mapred之上,用於管理和查詢結構化 非結構化資料的資料倉儲。可以將結構化的資料檔案對映為一張資料庫表,並提供類sql查詢功能。hive將hql語句轉譯成m r job,然後按照mr的計算框架在hadoop執行,也可...