用烫伤读取HBase

时间:2012-08-08 05:16:05

标签: cascading scalding

我对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的数据不是我可以直接使用的字节数组。

我错过了什么?

2 个答案:

答案 0 :(得分:1)

您可以在GitHub的Scalding项目here中阅读此链接 在级联用户组中,这个message谈论它

祝福

答案 1 :(得分:1)

查看此项目https://github.com/ParallelAI/SpyGlass,该项目为Scalding提供HBase点击。 顺便说一句,如果你想避免使用SpyGlass处理Array [Byte],你可以使用fromBytesWritable方法来转换你需要处理的字段。