【问题标题】:Loading Hbase table with Pig. Float gives FIELD_DISCARDED_TYPE_CONVERSION_FAILED用 Pig 加载 Hbase 表。浮点数给出 FIELD_DISCARDED_TYPE_CONVERSION_FAILED
【发布时间】:2016-11-14 17:41:32
【问题描述】:

我有一个通过 HBase Java api 加载的 HBase 表,如下所示:

put.add(Bytes.toBytes(HBaseConnection.FAMILY_NAME), Bytes.toBytes("value"), Bytes.toBytes(value));

(其中变量value是一个普通的java浮点数。)

我继续用 Pig 加载它,如下所示:

raw = LOAD 'hbase://tableName' USING org.apache.pig.backend.hadoop.hbase.HBaseStorage('family:value', '-loadKey true -limit 5') AS (id:chararray, value:float);

但是,当我将其转储为:

dump raw;

我明白了:

[main] WARN  org.apache.pig.backend.hadoop.executionengine.mapReduceLayer.MapReduceLauncher - Encountered Warning FIELD_DISCARDED_TYPE_CONVERSION_FAILED 5 time(s).

对于每个浮点值。 ID 打印得很好。

我正在跑步:

  • Apache Hadoop 0.20.2.05
  • 猪 0.9.2
  • Hbase 0.92.0

我的问题:为什么猪不能处理这些浮点值?我做错了什么?

【问题讨论】:

  • 尝试不带AS (id:chararray, value:float) 部分。它倾倒什么?在调用 Bytes.toBytes 之前尝试将 value 转换为 String,以了解问题所在。
  • 我按照您的建议删除了“as”子句,但我得到的只是看起来很奇怪的 Udf-8 字符(因为数据是二进制的)。

标签: hadoop hbase apache-pig


【解决方案1】:

原来你必须添加一个脚轮。像这样:

USING org.apache.pig.backend.hadoop.hbase.HBaseStorage('family:value', '-loadKey true -limit 5 -caster HBaseBinaryConverter')

【讨论】:

  • 限制是否按预期为您工作?我给了这个命令 (field = LOAD 'hbase://documents' USING org.apache.pig.backend.hadoop.hbase.HBaseStorage('info:collection', '-loadKey true -limit 5 -caster HBaseBinaryConverter' ) 作为 (id:chararray, field:chararray );) 然后使用“转储字段”。在 mapreduce hbase 显示加载和转储 260 条记录而不是 5 条记录后。我不明白为什么
【解决方案2】:

请通过以下方式尝试:

test = load '/user/training/user' using PigStorage(',') 
  as (user_id, name, age:int, country, gender);

因为加载的默认分隔符是tab

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多