如何在HBase中编码float / double / integer值?

时间:2017-02-14 07:52:24

标签: scala hadoop apache-spark hbase hadoop2

我将每个列值编码为字符串,以便使用以下内容在HBase中加载数据:

put.add("columnFamily".getBytes(), new String(columnName).getBytes(), new String(value).getBytes())

这就是我获得例外的原因

java.lang.IllegalArgumentException: offset (0) + length (4) exceed the capacity of the array: 1

在读取数据时,因为其中一列具有浮点值(如果我没有记错的话)。很少有像org.apache.hadoop.hbase.util.Bytes.toBytes(float)这样的方法可用,但我不知道该怎么做。

有人可以告诉我如何编码float / double / integer值,以便从HBase I进一步读取数据不会得到相同的异常? 任何帮助都将受到高度赞赏。

1 个答案:

答案 0 :(得分:2)

您可以执行以下操作:

import org.apache.hadoop.hbase.util.Bytes

val intNumber: Int = 100

put.addColumn(Bytes.toBytes("column_family_name"), Bytes.toBytes("column_name"), Bytes.toBytes(intNumber))

以上将以字节格式保存HBase表中的数字,如果您想以字符串格式保存数字,可以将toString添加到intNumber,如下所示

put.addColumn(Bytes.toBytes("column_family_name"), Bytes.toBytes("column_name"), Bytes.toBytes(intNumber.toString))