2017-05-29 66 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数据类型相关。