2

私は 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直接操作できるバイト配列ではありません。

私は何が欠けていますか?

4

1 に答える 1