#hive#HIVE中使用python實現UDF

HIVE中使用python實現UDF

HIVE,FACEBOOK的一個開源項目,利用類SQL的語句(HiveQL)來加快一般的MapReduce的開發過程。

UDF,user defined function, 因爲HIVE畢竟不是一般的關係型數據庫,支持的HQL有限,如果要實現複雜的功能,就要通過自己定義函數來幫助實現。

HIVE應該利用PIPE的原理,將自己查詢的結果放到python腳本的stdin中。所以他的查詢結果不會顯示在terminal中,terminal中顯示的結果是python的執行結果。

使用HIVE的命令進入數據倉庫(search)

1
use search;

使用HIVE的命令查看已經建立的表

1
show tables;

使用HIVE的命令查看xxx表中的字段

1
describe xxx;

使用HIVE命令用PYTHON實現UDF

1
2
3
4
5
6
7
8
add file udf.py;
SELECT 
TRANSFORM(keyword)
USING 'python udf.py'
AS(keyword)
FROM xxx
WHERE dt='2013-09-25'
;

要注意的是,這裏的TRANSFORM的內容可以寫*,但是AS()裏就不能寫*,會報錯。

輸入到python中的內容,是按照AS裏的數量來決定的。

下面是python的腳本,內容很簡單,就是把輸入的東西原封不動輸出來。

udf.py
1
2
3
4
import sys
for line in sys.stdin:
  line = line.strip()
  print line


########################################################################

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要注意這個問題。


發佈了56 篇原創文章 · 獲贊 10 · 訪問量 32萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章