gpt4 book ai didi

hadoop - 使用 Pig 在 HBase 中为列族添加可变数量的列

转载 作者:可可西里 更新时间:2023-11-01 15:27:23 25 4
gpt4 key购买 nike

我需要使用 HBaseStorage 从 Pig 加载到 HBase,但我无法弄清楚如何为特定列族加载可变数量的列。(已知数量的列很简单)

看起来像这样的数据:(为便于阅读而添加的空格)

Id,ItemId,Count,Date
1 ,1 ,2 ,2015-02-01
2 ,2 ,2 ,2015-02-02
3 ,1 ,2 ,2015-02-03

我有一个 HBase 表,其中包含 rowkey 和一个名为 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,但也不起作用。有什么建议吗?

注意:标识为重复的推荐解决方案并不能解决我的问题,它基本上推荐使用 MapReduce 并且我的数据结构不同。

最佳答案

为了将数据加载到 HBase,您在 PIG 中的数据应采用以下格式:

tuple(key, map(col_qual, col_value))

在你的情况下:

(1,[2015-02-03#2])
(1,[2015-02-01#2])
(2,[2015-02-02#2])

您可以直接从您的初始数据创建这种类型的对象:

A = LOAD 'items.csv' USING PigStorage(',') as (Id,ItemId,Count:chararray,CreationDate:chararray);
storeHbase = FOREACH A GENERATE ItemId, TOMAP(CreationDate, Count);

或者如果你想在按键分组后实现它:

B = FOREACH A GENERATE ItemId, TOTUPLE(CreationDate, Count) as pair;
C = GROUP B BY ItemId;
storeHbase = FOREACH C {
Tmp = FOREACH $1 GENERATE TOMAP(pair.CreationDate,pair.Count);
GENERATE group, FLATTEN(Tmp);
};

毕竟您可以将数据加载到 HBase:

STORE storeHbase into 'hbase://mytable' USING org.apache.pig.backend.hadoop.hbase.HBaseStorage('Attributes:*');

mytable 是您的 HBase 表,Attributes 是您的列族。

关于hadoop - 使用 Pig 在 HBase 中为列族添加可变数量的列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42097960/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com