2012-02-28 3 views
1

У меня есть таблица Hbase, который загружается через API HBase Java, как так: (. В случае, если переменная value является нормальным ява поплавок)Загрузка таблицы Hbase с помощью Pig. Float дает FIELD_DISCARDED_TYPE_CONVERSION_FAILED

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

я перехожу к загрузке это с Свиньи следующим образом:

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). 

для каждого значения с плавающей точкой. Идентификаторы напечатаны в порядке.

Im работает:

  • Apache Hadoop 0.20.2.05
  • Pig 0.9.2
  • Hbase 0.92.0

Мой вопрос: Почему я не свинья ручка тезисы всплывают значение? Что я делаю не так?

+0

Попробуйте использовать элемент 'AS (id: chararray, value: float)'. Что он сбрасывает? Попробуйте преобразовать значение в String перед вызовом Bytes.toBytes на нем, просто чтобы узнать, в чем проблема. –

+0

Я удалил предложение «как», как вам было предложено, но все, что я получаю, - это странно выглядящие символы Udf-8 (поскольку данные двоичные). –

ответ

4

Оказывается, вы должны добавить заклинателя. Как так:

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

Лимит работал для вас, как и предполагалось? Я дал эту команду ** (field = LOAD 'hbase: // documents' USING org.apache.pig.backend.hadoop.hbase.HBaseStorage ('info: collection', '-loadKey true -limit 5 -caster HBaseBinaryConverter') as (id: chararray, field: chararray);) **, а затем используется поле «дамп». После того, как mapreduce hbase показывает 260 записей, загруженных и сбрасываемых вместо 5. Я не понимаю, почему – kich

+0

Ну, это было давно, но да, я думаю, это сработало нормально. –

0

Пожалуйста, попробуйте по следующим образом:

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

По умолчанию разделителем для загрузки является вкладка.