在hbase中,每行都有以下列:
u1:chararray, u2:chararray, ..., un:chararray
在名为u(来自utable)的列族中,每行的数字n可以不同。我想在元组中加载所有这些列而不命名它们(例如使用*字符),但我不知道如何这样做。
目前,我使用以下行创建元组:
qoe1 = LOAD 'hbase://utable'
USING org.apache.pig.backend.hadoop.hbase.HBaseStorage('u:u1, u:u2, u:u3', '-loadKey true')
AS (ID:chararray, u1:chararray, u2:chararray, u3:chararray);
但正如我之前所说的,这并不令人满意,因为我只能加载固定数量的列。
你知道吗?
3条答案
按热度按时间gcxthw6b1#
为了处理pig中的数据,您需要知道数据的模式。这不是最优雅的解决方案,但是因为您知道您不会有超过25个字段,所以比找到问题的优雅解决方案更快的方法是一次性键入所有25个字段,将它们放入一个元组中,然后继续。
ctrmrzij2#
我也遇到了同样的问题。解决方法如下:如果知道列族名称,可以使用以下方法将属于某个列族的所有列从hbase加载到pig中。基本上可以归结为将所有列(使用*)放在Map中:
cygmwpex3#
现在回答这个问题有点晚了,但它值得分享的知识,以美丽的开发谁总是相信stackoverflow的世界@sandervandenoord的答案非常适合从hbase表加载数据。
要对数据进行进一步的操作,您应该需要更多的技术。一个名为pigitos的自定义udfjar提供了一些有用的函数。你可以从这里下载。
下面是代码片段。
上面代码的第4行只是一个关于如何使用
MapEntriesTpBag
来自自定义项的函数。您可以使用该链接中描述的可用函数执行更多操作。非常感谢亚当·卡瓦http://hakunamapdata.com