Чтение из HBase с обвариванием

Я очень новичок в Cascading/Scalding и не могу понять, как горячо читать данные из HBase.

У меня есть таблица в HBase, где хранится история рук в покерных играх (очень простым способом: id -> hand, serialized with ProtoBuf). Задание ниже должно пройти всю историю и создать словарь всех игроков:

class DictionaryBuilder(args: Args) extends Job(args) {

  val input = new HBaseSource("hand", "localhost", 'hand, Array("d"), Array("blob"))
  val output = TextLine("tutorial/data/output0.txt")

  input
    .read
    .flatMap('hand -> 'player) {
    handBytes: Array[Byte] =>
       HandHistory.parseFrom(handBytes).getPlayerList.map(_.getName)
    }
    .write(output)

}

Однако, когда я запускаю задание выше, выдается ошибка

Caused by: com.google.protobuf.InvalidProtocolBufferException: Protocol message end-group tag did not match expected tag.
    at com.google.protobuf.InvalidProtocolBufferException.invalidEndTag(InvalidProtocolBufferException.java:73)
    at com.google.protobuf.CodedInputStream.checkLastTagWas(CodedInputStream.java:106)
    at com.google.protobuf.AbstractMessageLite$Builder.mergeFrom(AbstractMessageLite.java:163)
    at com.google.protobuf.AbstractMessage$Builder.mergeFrom(AbstractMessage.java:661)

, что означает, что данные, которые пришли в flatMap, не являются массивом байтов, с которым я могу работать напрямую.

Что мне не хватает?


person Vasil Remeniuk    schedule 08.08.2012    source источник
comment
Вы поняли это? Я пытаюсь сделать то же самое, но класса HBaseSource, кажется, даже не существует в Scalding...   -  person jeffreyveon    schedule 02.09.2012


Ответы (1)


Взгляните на этот проект https://github.com/ParallelAI/SpyGlass, в котором реализован кран HBase для Ожог. Кстати, если вы хотите не иметь дело с Array[Byte], с SpyGlass, вы можете использовать метод fromBytesWritable для преобразования полей, с которыми вам нужно иметь дело.

person galarragas    schedule 20.04.2014