pig學習日誌

pig中支持的數據類型
int 32位整數
long 64位整數
float 32爲浮點
double 64位浮點
chararray 字符串 UTF-8 格式
bytearray blod二進制
boolean 布爾
datetime 時間
tuple 數組,如:(19,2)
bag 數組的數組,如:{(19,2), (18,1)}
map key,value組合的結構列表,如[open#apache]java

Schemas
Schemas是指pig script的數據結構,按照原數據列的數據類型來定義,你必須定義準確才能開始你後面的處理工做, Schemas在as語句裏邊定義,其中LOAD, STREAM, and FOREACH 後面均可以接as語句。linux

pig關係運算符shell

LOAD
將數據從文件系統中載入,返回一個bag,
語法:
LOAD 'data' [USING function] [AS schema];
data指文件的路徑,也能夠指定文件夾,這樣輸入就變成該文件夾下面的全部文件,hadoop中的組件都是這樣的。
USING function 默認是USING PigStorage 以'\n'爲行的劃分以'\t'爲列的劃分。可用的還包括BinStorage,JsonStorage,HBaseStorage以及一些用戶自定義函數等等
AS schema 是根據'data'的數據結構來定義的。須要指定正確的列數以及數據類型。格式爲:(f1:int, f2:chararray, f3:datetime);若是你不指定全部列都會被識別爲bytearray.且沒有名字.
列數太少,多出來的列不處理,列數多了所有填充null.express


GROUP 與 COGROUP
分組數據,2者功能同樣,爲了可讀性GROUP處理一個關係,COGROUP處理多個.
語法:
alias = GROUP alias { ALL | BY expression} [, alias ALL | BY expression …] [USING 'collected' | 'merge'] [PARTITION BY partitioner] [PARALLEL n];
USING 'collected' | 'merge'] collected操做對象爲一個關係的時候用。merge多個關係的時候用。都是爲了讓處理過程集中在map階段,但不是全部處理均可以使用。詳細參考文檔
BY expression指定分組依據支持數組類型
PARTITION BY partitioner 指定一個自定義的java類的完整路徑。我理解的是自定義map結果的分割方式,通常狀況下咱們按照key的值分組,而後分給reduce。在這裏咱們能夠實現按不一樣方式分組。
PARALLEL n指定reduce的併發數apache


FOREACH
FOREACH提供基於列的數據生成數據的轉換功能。能夠用$i表示列,i從0記起。
例如:
DUMP A;
(1,2,3,2,4)
(2,6,7,6,7)
X = FOREACH A GENERATE $0, $2;
DUMP X;
(1,3)
(2,7)數組

STORE
將數據保存到文件系統中。
語法:
STORE alias INTO 'directory' [USING function];
alias指定義的關係的名字
directory輸出目錄,必須每次都是全新的數據結構

STREAM
將數據發送到一個pig腳本或者其餘程序處理,而且返回一個關係
語法:
alias = STREAM alias [, alias …] THROUGH {`command` | cmd_alias } [AS schema] ;
`command` 一條linux shell命令。
cmd_alias 聲明的命令,聲明語法如: DEFINE mycmd `stream.pl –n 5`;
腳本輸出的數據按照\n,\t分割的模式處理。STREAM會將全部該關係的數據以字符串形式傳遞給腳本,數據會很是大。執行速度會受必定的影響。併發

相關文章
相關標籤/搜索