Pig關係型運算子例子

2022-07-24 14:24:29 字數 3581 閱讀 5786

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...