Я очень новичок в 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
, не являются массивом байтов, с которым я могу работать напрямую.
Что мне не хватает?