主要分為兩個部分,乙個部分為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執行,也可...