豬與蟒(pigandpython)

abel_cao發表於2014-12-21

版權宣告:本文為半吊子子全棧工匠(wireless_com,同公眾號)原創文章,未經允許不得轉載。 https://blog.csdn.net/wireless_com/article/details/42060415

Python 真是無處不在呀.

pig 0.9以後將python作為嵌入式支援語音,使用Jython直譯器利用python2.5的功能,這個介面的最上層是org.apache.pig.scripting.Pig
首先python指令碼會對一段Pig Latin指令碼進行編譯,然後將在Python中定義的變數傳遞給它,最後執行它。

1) Pig.compile 或compilefromFile 對程式碼進行預編譯
2)Bind 方法將控制流中的變數繫結到Pig Latin指令碼中的變數,會返回一個BoundScript物件
3)針對BoundScript物件,可以呼叫runSingle方法來執行他,返回一個pigStat物件,如果在繫結過程中pig物件繫結到了一組包含引數的map,就要呼叫run方法了,同樣返回一個pigStats物件。

使用者編寫的UDF的一個單獨的例項會被構建並執行在每個map或reduce的任務中,構造器引數是一種傳遞資訊給使用者UDF的方式。
python與pig的型別對應

int number
long number
float number
double number
chararray string
bytearray string
map dictionary
tuple tuple
bag list oftuples 

pig 的載入函式是基於hadoop的InputFormat建立的,基類是loadFunc,LoadFunc 的預設實現是針對HDFS的,pig 提供了prepareToRead 方法為載入函式提供了初始化自己的一個途徑。一旦使用者的載入函式實現了getSchema 方法,那麼Load語句就不再需要定義他們的模式了。

同理,儲存函式式基於Hadoop的OutoutFormat構建的。接受的是Pig的Tuple,然後根據輸出個好事建立健-值對後寫入儲存中,基類是storeFunc,Pig會在每個map或reduce 任務中呼叫儲存函式的prepareToWrite方法,PutNext是儲存函式的核心方法。


相關文章