pig使用問題總結

2021-09-02 13:24:17 字數 1612 閱讀 2532

1,如果是a::tags#'pic'作為引數,傳遞給另乙個函式方法,需要轉義多次,

二次呼叫函式,就是這個方法裡,又呼叫了其他方方法,引數也是層層傳遞,需要轉義兩次,尤其是map裡的函式,

c1 = two_use_cart_filter_by_clkloc_distinct_vid_and_ic(c,0,2,'vid','cvid','tags#\\\'pic\\\'','cpic') ;

一次呼叫函式,只需轉一次即可

cx = get_distinct_data_by_field(cx,b::vid,'bvid','b::tags#\'pic\'','bpic') ;

2,在pig函式中,如果傳入的變數join後有別名的標量,不要使用a:tags#'et'語法寫,直接使用tags#'et'引用

3,在function指令碼中,

註冊變數,必須使用單引號引起來 ,如下

register '/home/lib/dhpig.jar';

register '/home/lib/event-log.jar';

在非函式指令碼中,則不需要

4, 在a.pig指令碼中,如果引用了乙個函式指令碼function.pig,則注意a指令碼的引數名字,不能和function.pig指令碼中函式名字一樣

5,單引號裡巢狀單引號,需要轉義使用

6,在a.pig中,引用了乙個b.pig 如果b.pig 裡面 定義了乙個函式,然後別名x,

在a.pig裡面使用 x2 = getx()接收,此時需要注意,x2 不能夠和b.pig裡面的函式裡面載入資料的schema的別名一樣 ,如果getx裡面

有這麼一段**:

bb = load  'xx' as (x2:chararray)

7, a和b通過join後的得到的乙個結果集r,如果傳給下乙個函式使用時,需要採用r::a::xx引用

如果有擴充套件字段,可以使r::a::map#'field'引用

8, 在使用轉換一些型別時候,如果預設不設定任何schema,那麼它將會是bytearray型別,如果想進行一些join操作,或者union,cross操作時,

一定要確保兩邊的join鍵的字元型別一致

ho = join $a by bvik left outer , $b by okey; ,如果bvik和okey的字元型別不一致,那麼將會出現如下異常:

int errcode = 1075;

string msg = "received a bytearray from the udf. cannot determine how to convert the bytearray to string.";

所以在,進行join前,一定確保型別一致,如下面的pig語句:$11和$3是要明確宣告所屬型別的

mz = foreach mf generate concat((chararray)$11,(chararray)$3) as vidic , $4 as gno:chararray ;

mp = group mz by vidic;

$ord = foreach mp generate  group  as okey , bagtostring($1.$1,'#') as rfxnos  ;

Pig 安裝總結學習

url size medium color red b 2.配置環境 b color size pig工作模式 本地模式 只需要配置path環境變數 bin即可,適用於測試 mapreduce模式 需要新增環境變數pig classpath conf 指向hadoop的conf目錄,我的是hadoo...

總結 Pig的安裝部署

tar zxvf pig 0.17.0.tar.gz c 2 建立軟鏈結 ln s pig 0.17.0 pigvi bashrc在檔案末尾加上這兩行 export pig home home 使用者名稱 pig 0.17.0 export path pig home bin path 1 本地模式...

使用apache下pig的一點總結

今天下午在公司用pig來實現一種資料分析的演算法,感覺很不錯,在這裡做乙個記錄,主要是實現一種邏輯關係。1 1 2 2 3 3 1 4 5 5 表示使用者,表示使用者所買的物品 首先可以做一次join關聯 對資料自己本身做一關聯join操作 1 1 1 1 1 1 1 4 2 2 2 2 3 3 3...