Apache Phoenix を使用して Hbase にテーブルを作成しています。これは、セカンダリ インデックス機能と SQL のようなデータ型を提供するためです。Double と Varchar の両方の列を持つ phoenix を使用してテーブルを作成しました。
CREATE TABLE INVOICE (ROWKEY VARCHAR NOT NULL PRIMARY KEY, CF1.INVOICEID VARCHAR, CF1.TOTALAMOUNT DOUBLE,CF1.STATUS VARCHAR,CF1.CREATEDATE DATE);
Phoenix は以下のように Double 値を ByteArray として Hbase に格納しています
column=CF1:TOTALAMOUNT, timestamp=1434102384451, value=\xC0m@\x00\x00\x00\x00\x01
Phoenix を使用せずに Hbase SCAN API から直接値を読み取るように mapreduce プログラムを作成しました。Phoenix と mapreduce の両方の出力を参照してください。以下のように、すべての正の double 値は負の値として返され、負の double 値は 0.018310546875 として返されます。
public void map(ImmutableBytesWritable key, Result value, Context context)
throws IOException, InterruptedException {
Double Val = Bytes.toDouble(value.getValue(CF.TOTALAMOUNT)
context.write(key, new Text(val));
}
-
AQIMPNEW_12345689_SQ123,-100.00000000000001
aqipm2037|4567899,0.018310546875,
aqipm2047|456789,-4.9E-324,
Phoenix Output :
| TOTALAMOUNT |
| 100.0 |
| -234.0 |
| 0.0