【问题标题】:Accumulo - Getting a properly sorted Scanner resultAccumulo - 获得正确排序的扫描仪结果
【发布时间】:2013-08-05 21:36:57
【问题描述】:

有没有办法对从 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 个条目。有没有办法覆盖排序,或者有没有一种方便的方法可以让 Scanner 得到正确排序?

【问题讨论】:

    标签: java sorting accumulo


    【解决方案1】:

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

    【讨论】:

    • 你是说我应该在时间戳末尾填充纳秒吗?
    • 我也不知道 Accumulo 以这种方式排序并感谢煽动。
    • 是的,完全正确。这将使它按您期望的方式排序。
    【解决方案2】:

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

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

    很遗憾,它已经 6 个月没有更新了。不过,这是一个有趣的概念。

    【讨论】:

    • 确实是一个有趣的概念。感谢您对项目的参考。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-08-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-04-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多