Apache spark 如何使用Hbase API getValue方法从Hbase获取Int值

Apache spark 如何使用Hbase API getValue方法从Hbase获取Int值,apache-spark,hbase,rdd,Apache Spark,Hbase,Rdd,我正在尝试使用列名从Hbase获取值,下面是我的代码: val cf = Bytes.toBytes("cf") val tkn_col_num = Bytes.toBytes("TKN_COL_NUM") val tkn_col_val = Bytes.toBytes("TKN_COL_VAL") val col_name = Bytes.toBytes("COLUMN_NAME") val sc = new SparkContext("local", "hbase-test") val co

我正在尝试使用列名从Hbase获取值,下面是我的代码:

val cf = Bytes.toBytes("cf")
val tkn_col_num = Bytes.toBytes("TKN_COL_NUM")
val tkn_col_val = Bytes.toBytes("TKN_COL_VAL")
val col_name = Bytes.toBytes("COLUMN_NAME")
val sc = new SparkContext("local", "hbase-test")
val conf = HBaseConfiguration.create()
conf.set(TableInputFormat.INPUT_TABLE, input_table)
conf.set(TableInputFormat.SCAN_COLUMNS, "cf:COLUMN_NAME cf:TKN_COL_NUM cf:TKN_COL_VAL")
val hBaseRDD = sc.newAPIHadoopRDD(conf, classOf[TableInputFormat], classOf[ImmutableBytesWritable], classOf[Result])
hBaseRDD.map{case (x,y) => (y)}.collect().foreach(println)
val colMap : Map[String,(Int,String)] = hBaseRDD.map{case (x,y) =>
  ((Bytes.toString(y.getValue(cf,col_name))),
    (
      (Bytes.toInt(y.getValue(cf,tkn_col_num))),
      (Bytes.toString(y.getValue(cf,tkn_col_val)))
        ))
}.collect().toMap
colMap.foreach(println)
sc.stop()
现在
Bytes.toString(y.getValue(cf,col_name))
工作了,我从表中得到了预期的列名,但是
Bytes.toInt(y.getValue(cf,tkn_col_num))
给了我一些随机值(我想这是单元格的偏移值,但我不确定)。下面是我得到的输出:

(COL1,(-2147483639,sum))
(COL2,(-2147483636,sum))
(COL3,(-2147483645,count))
(COL4,(-2147483642,sum))
(COL5,(-2147483641,sum))
整数值应为
1,2,3,4,5
。谁能告诉我怎样才能得到真正的整数列数据。
谢谢

您是否尝试将整数有效值作为
字节。toString
然后也会出现随机值?您是如何存储数据的?Int或Long?使用相应的方法。嘿,抱歉,伙计们,我在度假,因此无法回复。数据存储为整数,我尝试了getInt方法,再次得到了随机值,但这次得到了不同的值。我仍在努力,看看背景中发生了什么。我将很快发布我的发现。Thanks@Novice您能否澄清您的整数数据是使用Bytes.toBytes(int)方法写入HBase的(以获取int字节)?如果您使用另一种方法,它可以以其他端返回字节。您是否尝试将整数有效值作为
字节。toString
则也会出现随机值?您如何存储数据?Int或Long?使用相应的方法。嘿,抱歉,伙计们,我在度假,因此无法回复。数据存储为整数,我尝试了getInt方法,再次得到了随机值,但这次得到了不同的值。我仍在努力,看看背景中发生了什么。我将很快发布我的发现。Thanks@Novice您能否澄清您的整数数据是使用Bytes.toBytes(int)方法写入HBase的(以获取int字节)?如果使用另一种方法,它可以以其他endianness返回字节。