0

有没有办法对从 Scanner 获得的条目进行排序?我遇到的问题是我有后缀索引来减轻重复的行 ID,当我扫描时,我没有得到一个完美的升序列表。例如,我得到如下所示的内容:

RowId: 2013-08-05 15:29:45.872        Value: 0
RowId: 2013-08-05 15:29:45.879        Value: 1
RowId: 2013-08-05 15:29:45.88         Value: 2
RowId: 2013-08-05 15:29:45.881        Value: 11 
//The previous should be the following:
RowId: 2013-08-05 15:29:45.88_a       Value: 3

正如您所看到的 .881 > .88 ,但正确的行之后放置了大约 30 个条目。有没有办法覆盖排序,或者是否有一种方便的方法可以让扫描仪返回正确排序?

4

2 回答 2

2

Accumulo 中的条目按字典顺序排序。在 ASCII 中,'1' 在 '_' 之前排序,这就是为什么在 '88_a' 之前有 '881'。当您尝试在 Accumulo 中保留数字排序时,一种方法是用零将数字填充到固定长度。如果您拥有的最大数字是 999,您会将所有数字设为 3 个字符长,因此“8”将变为“008”,“88”将变为“088”。

于 2013-08-06T18:23:52.403 回答
0

正如比莉所说,Accumulo 按字典顺序排序。GitHub 上有一个名为 Orderly 的项目,您可能想查看它

该项目将各种简单和复杂的关键数据类型序列化为保留排序顺序的字节编码。对序列化字节数组进行排序会产生与底层数据类型的自然排序顺序相同的排序

不幸的是,它在 6 个月内没有更新。这是一个有趣的概念。

于 2013-08-09T22:52:13.920 回答