2017-05-29 64 views
0

我使用pig加載hbase表。將地圖轉換爲元組

product = LOAD 'hbase://product' USING org.apache.pig.backend.hadoop.hbase.HBaseStorage('a:*', '-loadKey true') AS (id:bytearray, a:map[]) 

關係product有一個元組,其中包含映射。我要地圖數據轉換成元組 這裏是樣品..

grunt>dump product; 
06:177602927,[cloud_service#true,wvilnk#true,cmpgeo#true,cmplnk#true,webvid_standard#true,criteria_search#true,typeahead_search#true,aasgbr#true,lnkmin#false,aasdel#true,aasmcu#true,aasvia#true,lnkalt#false,aastlp#true,cmpeel#true,aasfsc#true,aasser#true,aasdhq#true,aasgbm#true,gboint#true,lnkupd#true,aasbig#true,webvid_basic#true,cmpelk#true] 
06:177927527,[cloud_service#true,wvilnk#true,cmpgeo#true,cmplnk#true,webvid_standard#true,criteria_search#true,typeahead_search#true,aasgbr#false,lnkmin#false,aasdel#false,aasmcu#false,aasvia#false,lnkalt#false,aastlp#true,cmpeel#true,aasfsc#false,aasser#false,aasdhq#true,aasgbm#false,gboint#true,lnkupd#true,aasbig#false,webvid_basic#true,cmpelk#true,blake#true] 

我想每個元組轉換爲個人的記錄,像下面

177602927,cloud_service,true 
177602927,wvilnk,true 
177602927,cmpgeo,true 
177602927,cmpgeo,true 

我非常新的豬也許這是我第一次用豬拉丁文做些什麼。任何幫助深表感謝。

回答

0

我能找到解決我的問題。

我使用了一個名爲MapEntriesToBag的UDF,它將所有的地圖轉換爲包。 這是我的代碼。

>register /your/path/to/this/Jar/Pigitos-1.0-SNAPSHOT.jar 
>DEFINE MapEntriesToBag pl.ceon.research.pigitos.pig.udf.MapEntriesToBag(); 
>product = LOAD 'hbase://product' USING org.apache.pig.backend.hadoop.hbase.HBaseStorage('a:*', '-loadKey true') AS (id:bytearray, a:map[]) 
>b = foreach product generate flatten(SUBSTRING($0,3,12)), flatten(MapEntriesToBag($1)); 

UDF在Jar Pigitos-1.0-SNAPSHOT.jar中可用。您可以從here

下載此罐子欲瞭解更多信息,你可以參考這link。它有更有趣的UDF與Map數據類型相關。