PIG - HBASE - 铸造值

Posted

技术标签:

【中文标题】PIG - HBASE - 铸造值【英文标题】:PIG - HBASE - Casting values 【发布时间】:2013-09-10 20:18:20 【问题描述】:

我正在使用 PIG 处理 HBase 表中的行。 HBase 表中的值存储为字节数组。

我不知道是否必须编写一个将字节数组转换为各种类型的 UDF,或者 pig 是否会自动执行此操作。

我有以下脚本:

raw = LOAD 'hbase://TABLE' USING org.apache.pig.backend.hadoop.hbase.HBaseStorage('CF:I') AS (product_id:bytearray);
ids = FOREACH raw GENERATE (int)product_id;
dump ids;

我得到一个括号列表'()'

根据docs,它应该可以工作。我检查了hbase shell中的值,它们都是 value=\x00\x00\x00\x02

我怎样才能让它工作?

【问题讨论】:

【参考方案1】:

需要添加以下选项才能将其投射...

LOAD 'hbase://TABLE' USING org.apache.pig.backend.hadoop.hbase.HBaseStorage('CF:I','-caster HBaseBinaryConverter') AS (product_id:bytearray);

感谢post。

【讨论】:

【参考方案2】:

如果列中有非文本值,则需要使用 HBaseBinaryConverter 指定 -caster 选项(默认为 Utf8StorageConverter)并将它们映射到相应的类型,以便 PIG 在将它们序列化为文本之前正确转换它们。

a = load 'hbase://TESTTABLE_1' using org.apache.pig.backend.hadoop.hbase.HBaseStorage('TESTCOLUMN_A TESTCOLUMN_B TESTCOLUMN_C ','-loadKey -caster HBaseBinaryConverter') as (rowKey:chararray,col_a:int, col_b:double, col_c:chararray);

【讨论】:

以上是关于PIG - HBASE - 铸造值的主要内容,如果未能解决你的问题,请参考以下文章

Pig + Hbase 原子增量列值

使用 Pig 访问 Hbase

Pig、Oozie 和 HBase - java.io.IOException: No FileSystem for scheme: hbase

何时使用 Hadoop、HBase、Hive 和 Pig?

无法使用 Pig 从 hbase 加载数据

使用 Pig 将 csv 导入 HBase