我有一个像这样创建的行键

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/

10-10 12:39