1.新建兩個檔案a.txt與b.txt,
a.txt檔案的內容如下:
0,1,2
1,3,4
b.txt檔案的內容如下:
0,5,2
1,7,8
將這兩個檔案上傳到目錄/zwy/soft
2.定義關係a與b,**如下
grunt> a = load '/zwy/soft/a.txt' using pigstorage(',') as (a1:int,a2:int,a3:int);
grunt> b = load '/zwy/soft/b.txt' using pigstorage(',') as (b1:int,b2:int,b3:int);
3.測試輸出a與b的內容
grunt>dump a;
(0,1,2)
(1,3,4)
grunt>dump b;
(0,5,2)
(1,7,8)
4.union命令,將多個關係歸併在一起
grunt> c =union a , b ;
grunt> dump c;
(0,5,2)
(1,7,8)
(0,1,2)
(1,3,4)
union運算子允許重複。可以使distinct運算子來對關係進行去重( dis = distinct c;)。
5.split命令,將乙個關係分割為多個
grunt> split c into d if $0 == 0 , e if $0 == 1;
grunt> dump d;
(0,1,2)
(0,5,2)
grunt> dump e;
(1,3,4)
(1,7,8)
在c上的split操作將乙個元組傳給另乙個關係,如果第乙個字段($0)為0,則送到d,如果為1,則送到e。
6.filter命令,將乙個關係裁剪為能夠通過某種測試的元組
grunt> f = filter c by $1 > 3;
grunt> dump f;
(0,5,2)
(1,7,8)
過濾出每個元組中第二個元素大於3的元組
7.sample命令,limit被用於從乙個關係中取出指定個數的元組,而sample運算子則根據特定的比例從乙個關係中隨機地取樣出元組。
用法為:「sample 別名 size,size範圍[0, 1]」
grunt> c_sample = sample c 0.4 ;
grunt> dump c_sample;
(1,3,4)
(0,5,2)
每次執行dump c_sample;輸出的結果都會不一樣
8.group命令,對元組按某一列進行分組
runt> g = group c by $2 ;
grunt> dump g;
(2,)
(4,)
(8,)
grunt> describe c;
c: grunt> describe g;
g: }
上面操作生成了乙個新的關係g ,它是對c中第3列 ($2 ,也被命名為a3) 相同的元組進行組合的結果。
group的輸出通常有兩個字段。第乙個欄位為組鍵,這裡是a3。第二個欄位是乙個bag (包) ,包含組鍵相同的所有元組。
觀察g的dump值,我們看到它有3個元組,對應於c中第3列的3個專有值。第乙個元組中的包代表c中第3列等於2的所有元組。在第二個元組中的包代表c中第3列等於4的所有元組,以此類推。
group輸出關係的第乙個字段總是名為「group」,代表組鍵。這裡似乎把第乙個字段叫做「a3」更自然些,但是當前pig並不允許你指定其它名字來取代「group」。
group輸出關係的第二個字段通常以其操作的關係為名,這裡是「c」,它總是乙個包。由於這個包承載了來自c的元組,因此這個包的schema與c的schema相同,由整數構成的3個字段分別被命名為a1、a2和a3。
使用group時,可以把關係中的所有元組都放入乙個大的包中,這有助於對關係進行聚集分析,因為函式是對包而不是對關係進行操作。例如:
grunt> h = group c all ;
grunt> dump h;
(all,)
grunt> i = foreach h generate count($1);
grunt> dump i ;
上述**是計算c中元組個數的一種方法。group all輸出的第乙個字段總是字串「all」
9.join命令,類似於sql join,通過兩個或多個表中的鍵將不同的關係聯絡起來
grunt > j= join a by $2 , b by $2;
grunt > dump j;
(0,1,2,0,5,2)
grunt> describe j;
j:
左外連線示例如下:
grunt > l= join a by $2 left outer , b by $2;
grunt > dump l;
(0,1,2,0,5,2)
(1,3,4,,,)
全外連線示例如下:
grunt > f = join a by $2 full , b by $2;
grunt > dump f;
(0,1,2,0,5,2)
(1,3,4,,,)
(,,,1,7,8)
右外連線示例如下:
grunt > f = join a by $2 right outer , b by $2;
grunt > dump f;
(0,1,2,0,5,2)
(,,,1,7,8)
10.foreach和flatten,瀏覽乙個關係中的所有元組,並在輸出中生成新的元組
grunt> k = foreach c generate a2, a2 * a3;
grunt> dump k;
(1,2)
(3,12)
(5,10)
(7,56)
flatten函式可以移除巢狀的層次,將巢狀式資料型別平坦化,幾乎就是建包的反向操作。flatten函式可以改變由foreach…generate產生輸出的結構,其平坦化的特性也會根據應用方式和應用目標的不同而有所不同。例如,語句foreach…generate $0 , flatten ($1)會為每個輸入元組生成乙個形式為(a,b,c)的輸出元組,**如下。
grunt> k = foreach g generate group, flatten(c);
grunt> dump k;
(2,0,1,2)
(2,0,5,2)
(4,1,3,4)
(8,1,7,8)
grunt> describe k;
k:
js關係型運算子 邏輯運算子
3.關係運算子的注意點 3.1對於非數值型別的資料,會先轉換成數值型別,再進行判斷 3.2對於關係運算子來說,任何資料和nan進行比較,返回值都是false 3.3如果參與比較的都是字串型別,那麼不會轉換成數值型別再比較,而是直接比較字元對應的 unicode編碼 let res null 0 fa...
關係運算子
通過關係運算子可以比較兩個值之間的關係 如果關係成立它會返回true,如果關係不成立則返回false 大於號 判斷符號左側的是否大於右側的 如果關係成立,則返回true,如果關係不成立則返回false 判斷符號左側的值是否大於或等於右側的值 小於等於 非數值的情況 對於非數值進行比較時,會將其轉換為...
關係運算子
關係運算子 大於 var a 1 2 console.log a false 小於 var num 19 var suv 20 var maxnumber suv num console.log maxnumber 等於 數值相同即可,哪怕資料型別不同,也會返回true var s 10 var m...