提问者:小点点

编写MapReduce时出现Apache Phoenix双数据类型问题


CREATE TABLE INVOICE (ROWKEY VARCHAR NOT NULL PRIMARY KEY, CF1.INVOICEID VARCHAR, CF1.TOTALAMOUNT DOUBLE,CF1.STATUS VARCHAR,CF1.CREATEDATE DATE);
column=CF1:TOTALAMOUNT, timestamp=1434102384451, value=\xC0m@\x00\x00\x00\x00\x01
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

共1个答案

匿名用户

Phoenix使用其不同的转换方案将数据类型存储到HBase中。当您使用Phoenix获取数据时,它会使用相同的转换方案对数据进行解码并显示给您。因此,与其尝试从MR代码直接连接HBase,不如使用Phoenix Map Reduce Integration。

参考:https://phoenix.apache.org/phoenix_mr.html

然而,如果你仍然想直接连接到HBase,你必须使用与菲尼克斯相同的编码器和解码器。