W3Cschool
恭喜您成為首批注冊(cè)用戶
獲得88經(jīng)驗(yàn)值獎(jiǎng)勵(lì)
在執(zhí)行join之類的操作以區(qū)分兩個(gè)模式的列之后,我們使用函數(shù) PluckTuple() 。要使用此函數(shù),首先,我們必須定義一個(gè)字符串Prefix,并且我們必須對(duì)以該prefix開頭的關(guān)系中的列進(jìn)行過濾。
下面給出了 PluckTuple() 函數(shù)的語法。
DEFINE pluck PluckTuple(expression1) DEFINE pluck PluckTuple(expression1,expression3) pluck(expression2)
假設(shè)在HDFS目錄 /pig_data/ 中有兩個(gè)文件,分別是 emp_sales.txt 和 emp_bonus.txt 。 emp_sales.txt 包含銷售部門員工的詳細(xì)信息, emp_bonus.txt 包含獲得獎(jiǎng)金的員工詳細(xì)信息。
emp_sales.txt
1,Robin,22,25000,sales 2,BOB,23,30000,sales 3,Maya,23,25000,sales 4,Sara,25,40000,sales 5,David,23,45000,sales 6,Maggy,22,35000,sales
emp_bonus.txt
1,Robin,22,25000,sales 2,Jaya,23,20000,admin 3,Maya,23,25000,sales 4,Alia,25,50000,admin 5,David,23,45000,sales 6,Omar,30,30000,admin
分別使用關(guān)系 emp_sales 和 emp_bonus ,將這些文件加載到Pig中。
grunt> emp_sales = LOAD 'hdfs://localhost:9000/pig_data/emp_sales.txt' USING PigStorage(',') as (sno:int, name:chararray, age:int, salary:int, dept:chararray); grunt> emp_bonus = LOAD 'hdfs://localhost:9000/pig_data/emp_bonus.txt' USING PigStorage(',') as (sno:int, name:chararray, age:int, salary:int, dept:chararray);
使用 join 運(yùn)算符連接這兩個(gè)關(guān)系,如下所示。
grunt> join_data = join emp_sales by sno, emp_bonus by sno;
使用 Dump 運(yùn)算符驗(yàn)證關(guān)系 join_data 。
grunt> Dump join_data; (1,Robin,22,25000,sales,1,Robin,22,25000,sales) (2,BOB,23,30000,sales,2,Jaya,23,20000,admin) (3,Maya,23,25000,sales,3,Maya,23,25000,sales) (4,Sara,25,40000,sales,4,Alia,25,50000,admin) (5,David,23,45000,sales,5,David,23,45000,sales) (6,Maggy,22,35000,sales,6,Omar,30,30000,admin)
現(xiàn)在,使用 PluckTupe() 函數(shù)定義要用來區(qū)分列的必需表達(dá)式。
grunt> DEFINE pluck PluckTuple('a::');
過濾 join_data 關(guān)系中的列,如下所示。
grunt> data = foreach join_data generate FLATTEN(pluck(*));
描述名為 data 的關(guān)系,如下所示。
grunt> Describe data; data: {emp_sales::sno: int, emp_sales::name: chararray, emp_sales::age: int, emp_sales::salary: int, emp_sales::dept: chararray, emp_bonus::sno: int, emp_bonus::name: chararray, emp_bonus::age: int, emp_bonus::salary: int, emp_bonus::dept: chararray}
由于我們已將表達(dá)式定義為“a ::",因此 emp_sales 模式的列將被作為 emp_sales :: column name ,emp_bonus 模式的列將被作為 emp_bonus :: column name
Copyright©2021 w3cschool編程獅|閩ICP備15016281號(hào)-3|閩公網(wǎng)安備35020302033924號(hào)
違法和不良信息舉報(bào)電話:173-0602-2364|舉報(bào)郵箱:jubao@eeedong.com
掃描二維碼
下載編程獅App
編程獅公眾號(hào)
聯(lián)系方式:
更多建議: