首页 > 解决方案 > 使用scala读取hbase值,转换问题

问题描述

我正在使用 scala 从 Hbase 列中读取数值数据,这些列之前是通过 Phoenix 填充的。我可以读取列值,但是当我将它们转换为字符串时,我仍然有字节值而不是实数,因此字符串填充了一些不可打印的值。

我假设问题出在我映射 RDD 时的转换中。这是我用来映射我的 RDD 的代码:

val hBaseRDD = sc.newAPIHadoopRDD(conf, classOf[TableInputFormat], classOf[ImmutableBytesWritable], classOf[Result])

  val stocksRdd = hBaseRDD.map {
  case (key: ImmutableBytesWritable, value: Result) =>

    (new String(value.getValue(Bytes.toBytes(indVarFamCol), Bytes.toBytes(indVar))),
    new String(value.getValue(Bytes.toBytes(depVarFamCol), Bytes.toBytes(depVar))))

}
stocksRdd.take(10).foreach(println)

我的实际结果是:

(�,�) (�,�) (�,�) (�,�) .....

然而它应该是:

(5,5) (23,55) (12,234) (23,55) .....

我正在阅读的 hbase 表条目如下所示:

\x80\x00\x07x 列=0:YEARSOFEDU,时间戳=1555763290217,值=\x80\x00\x00\x10

我的任务是读取值并转换为字符串以查看实际数字。

我在 HBASE 和 scala 中相对较新,所以任何澄清都将不胜感激。

谢谢

标签: scalaapache-sparkhbasephoenix

解决方案


推荐阅读