hive中執行python指令碼
阿新 • • 發佈:2018-12-29
hive中可以載入python指令碼,然後在hive中執行。
好處:可以解決模型離線上線問題和一些基於行的運算。
python指令碼:
import sys #本程式碼實現47中變換中的求均值 #執行前先處理掉空值 ''' 表結構: uid,c1,c2,c3 123,11,22,33 ... ... ''' if __name__ == '__main__': for line in sys.stdin: #hive一行一行讀取,必須使用標準輸入流輸入 features = line.strip().split('\t') # 在hive表中欄位間的分割符是\t if len(features) != 7: #判斷每行的長度是否正確,理論上這句if不要也沒問題 print(sys.stderr, "error:error1!") break avg = (int(features[1])+int(features[1])+int(features[1])) / 3 # hive傳入的資料全部為string型別,所以要先轉成int後計算 print(str(features[0])+'\t'+str(avg)) # 輸出到hive表中,輸出的格式必須為string型別,'\t'為分隔符
hive中程式碼:
add ARCHIVE hdfs:///tmp/anaconda3_nlp.zip; -- 指定python及相關包的路徑,該路徑為叢集hdfs上的路徑
add file hdfs:///tmp/02_LSTM/tmp.py; -- 將上面的python指令碼上傳到hdfs上(比如你自己的檔案下)
drop table if exists manyorder_model_lstm_columntorow;
create table manyorder_model_lstm_columntorow as
select
transform(
uid
,c1
,c2
,c3
)
using 'anaconda3_nlp.zip/anaconda3/bin/python tmp.py' -- 指定python的路徑
as (uid,avg)
from tableX
;