HIVE中使用python實現UDF
HIVE,FACEBOOK的一個開源項目,利用類SQL的語句(HiveQL)來加快一般的MapReduce的開發過程。
UDF,user defined function, 因爲HIVE畢竟不是一般的關係型數據庫,支持的HQL有限,如果要實現複雜的功能,就要通過自己定義函數來幫助實現。
HIVE應該利用PIPE的原理,將自己查詢的結果放到python腳本的stdin中。所以他的查詢結果不會顯示在terminal中,terminal中顯示的結果是python的執行結果。
使用HIVE的命令進入數據倉庫(search)
1
|
|
使用HIVE的命令查看已經建立的表
1
|
|
使用HIVE的命令查看xxx表中的字段
1
|
|
使用HIVE命令用PYTHON實現UDF
1 2 3 4 5 6 7 8 |
|
要注意的是,這裏的TRANSFORM的內容可以寫*,但是AS()裏就不能寫*,會報錯。
輸入到python中的內容,是按照AS裏的數量來決定的。
下面是python的腳本,內容很簡單,就是把輸入的東西原封不動輸出來。
udf.py
1 2 3 4 |
|
Hive可以使用Python腳本大大地提高數據處理的開發效率,使用MapReduce的方式將數據處理成想要的結果。
我們使用ADD FILE 爲Hive增加一個腳本,或者Jar包。
有兩種方式:
ADD FILE {env:HOME}/your_file/your_script.py
ADD FILE /home/your_name/your_file/your_script.py
在調用的時候,過去的版本可以使用:
FROM u_data
SELECT
TRANSFORM (userid, movieid, rating)
USING 'python /home/dacoolbaby/test_data_mapper3.py'
AS str
;
但是在Hive 0.10貌似不支持這樣弄。
FROM u_data
SELECT
TRANSFORM (userid, movieid, rating)
USING 'python test_data_mapper3.py'
AS str
;
後面的是腳本的名稱,而不是整個的路徑名。
以後在Hive下面使用Hadoop Distributed Cache要注意這個問題。