我有一个像这样创建的行键
Put put = new Put(Bytes.toBytes(tweets.getContact_Unique_Id()+"^"+Bytes.toBytes(epoch)));
历元是较长的时间戳。
现在,当我扫描时,
3857 ^ [B @ 7c8f4424
现在,我希望将rowkey的一部分转换为Long
[B @ 7c8f4424
我该如何实现。
编辑->如果我使用put作为
放置权=新放置权(Bytes.toBytes(tweets.getContact_Unique_Id()+“ ^”
+纪元);
并非所有行都插入,但是当我使用时
卖权=新
Put(Bytes.toBytes(tweets.getContact_Unique_Id()+“ ^” + Bytes.toBytes(epoch)));;
将插入所有行,请注意所有时间值都不同。
另请注意,我已经使用“ ^”分隔了rowkey的第一部分和第二部分。
谢谢
最佳答案
您以错误的方式保存长期价值!
因为当您使用+
时,具有长值字节的数组将转换为字符串,所以转换后的值将显示字节数组内存中的当前地址,而不是其值!
正确的保存方式:
Put put = new Put(Bytes.add(Bytes.toBytes(tweets.getContact_Unique_Id() + "^"), Bytes.toBytes(epoch))); //I kept "^", don't know why you need it
并检索:
// row is the byte array of your key
// Bytes.tail(..) gets tail of key's bytes with bytes of your long
// Bytes.toLong(..) converts long bytes to long
// 8 corresponds to long size in bytes
Bytes.toLong(Bytes.tail(row, 8))
关于java - Hbase byteArray到Long,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/38095801/