我需要使用hbastorage从pig加载到hbase,但我不知道如何使用特定列族的可变列数进行加载
如下所示的数据:(为便于阅读而添加空格)
Id,ItemId,Count,Date
1 ,1 ,2 ,2015-02-01
2 ,2 ,2 ,2015-02-02
3 ,1 ,2 ,2015-02-03
我有一个带有rowkey的hbase表和一个名为attributes的列族。因此,我首先使用以下方法加载csv:
A = LOAD 'items.csv' USING PigStorage(',')
as (Id,ItemId,Count:chararray, CreationDate:chararray);
现在我要按itemid对它们进行分组,所以我要执行以下操作:
B = FOREACH A GENERATE ItemId, TOTUPLE(Date, Count);
C = GROUP B BY ItemId
所以我把我的数据很好地分组,用键,然后是元组和日期和计数:
1 {(2015-02-03, 2),(2015-02-01, 2)}
2 {(2015-02-02, 2)}
我在hbase中的目标是一行两列,带日期和计数:
Rowkey = 1 (Attributes.2015-02-03,2) (Attributes.2015-02-01,2)
Rowkey = 2 (Attributes.2015-02-02,2)
这是我正在努力解决的问题,我如何定义我有一个可变的列数?我尝试了以下方法以及多种其他组合:
STORE onlygroups into 'hbase://mytable'
USING org.apache.pig.backend.hadoop.hbase.HBaseStorage('Attributes:*');
但有几个错误,例如:
ERROR 2999: Unexpected internal error. org.apache.pig.data.InternalCachedBag
cannot be cast to java.util.Map
我也尝试过使用tomap,但也不起作用。有什么建议吗?
注意:被标识为duplicate的推荐解决方案并不能解决我的问题,它基本上建议使用mapreduce,并且我的数据结构不同。
1条答案
按热度按时间pexxcrt21#
为了将数据加载到hbase,pig中的数据应采用以下格式:
就你而言:
您可以直接从初始数据创建此类型的对象:
或者如果您想在按键分组后实现它:
毕竟,您可以将数据加载到hbase:
哪里
mytable
是您的hbase表和Attributes
是你的家人。