- 基礎概念:
Pig是基於hadoop的一個數據處理的框架。
Pig的數據處理語言是數據流方式的,類似於初中做的數學題。
Pig基本數據類型:int、long、float、double、chararray、bytearray
複合數據類型:Map、Tuple、Bag
和數據庫的對應關係:
<code>pig database relation/bag table tuple one record field field(one volume)/<code>
但是pig中tuple的字段數是隨意的,這點和數據庫不同
- 運行模式以及註釋:
運行模式
a) 本地
i. pig –x local
b) 集群
i. pig –x mapreduce
ii. 或者pig
c) 批處理命令
i. 將命令批量寫入xx.pig
ii. 用本地或者集群模式運行,如pig xx.pig
註釋
a) 段落註釋:/**/
b) 行註釋: --
- 基本用法框架:
a) 輸入
i. A = Load ‘輸入路徑’ USING PigStorage(“\t”) AS (name:chararray, age:int, gpa:float);
ii. 邏輯:用pig自帶的PigStorage讀入輸入路徑的數據,對每一行用”\t”分割,並用字符串類型的name、int類型的age、float類型的gpq作為每行數據的字段名
b) 中間處理
i. B = FOREACH A GENERATE name;
c) 輸出
i. DUMP B; --輸出到控制檯
ii. 或者STORE B INTO ‘輸出路徑’ USING PigStorage();
- 基本語法實例:
計算多維度組合下的平均值 的實際例子
需求:求文件中第2、3、4組合的第4、5列的平均值
腳本解釋:
<code>A = Load '1.txt' USING PigStorage(' ') AS(col1:chararray, col2:int, col3:int, col4:int, col5:double, col6:double);/<code>
A的結構是
<code>{col1:chararray, col2:int, col3:int, col4:int, col5:double, col6:double)}/<code>
<code>B = GROUP A BY (col2, col3, col4);/<code>
對A用col2/col3/col4的組合進行分組,然後按組將每條tuple彙集成一個bag,B的數據結構是B:{group:(col2,col3,col4),A:bag{:tuple,tuple}}
<code>C = FOREACH B GENERATE group, AVG(col5), AVG(col6);/<code>
FOREACH是遍歷每個組中彙集的tuple,並對其用組合函數處理字段C的結構是C:{group:(col2,col3,col4),double,double}
<code>DUMP C;//單機運行打印調試信息 STORE C INTO “output”;//存儲結果/<code>
統計行數
<code>A = LOAD '1.txt' USING PigStorage (' ‘) AS(col1:chararray, col2:int, col3:int, col4:int, col5:double, col6:double); B = GROUP A all; C = FOREACH B GENERATE COUNT(col2); DUMP C;/<code>
注意:如果col2這一列有NULL,則這一行將不會被統計。
GROUP A all;沒有by關鍵字。
FLATTEN
同1中的例子,但是C不同
<code>C = FOREACH B GENERATE FLATTEN(group), AVG(col5), AVG(col6);/<code>
1中的例子得到的結果結構是(col2, col3, col4),avg1,avg2
但是對group作用FLATTEN後結構變為col2,col3,col4,avg1,avg2;可以看出FLATTEN的作用是解嵌套(un-nest)包或者元組tuple,
GROUP的兩點說明:
a)用於GROUP的key如果多於一個字段(正如本文前面的例子),則GROUP之後的數據的key是一個元組(tuple),否則它就是與用於GROUP的key相同類型的東西
b)GROUP後得到的結果是一個包或者是relation,其包含的每一個tuple中包含兩個字段,第一個字段被命名為'group',第二個字段是一個包,是含有group對應值的所有tuple的set。