0

スキャナから取得したエントリをソートする手段はありますか? 私が抱えている問題は、重複する行 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 を戻す便利な方法はありますか?

4

2 に答える 2

2

Accumulo のエントリは、辞書順にソートされます。ASCII では、'1' は '_' の前にソートされます。これが、'88_a' の前に '881' がある理由です。Accumulo で数値の並べ替えを維持しようとしている場合、1 つの方法は、数値をゼロで固定長にパディングすることです。最大数が 999 の場合、すべての数字を 3 文字の長さにすると、'8' は '008' になり、'88' は '088' になります。

于 2013-08-06T18:23:52.403 に答える
0

Billie が言ったように、Accumulo は辞書順でソートします。GitHub に Orderly と呼ばれるプロジェクトがあり、ぜひチェックしてみてください。

このプロジェクトは、さまざまな単純および複雑なキー データ型を、並べ替え順を保持するバイト エンコーディングにシリアル化します。シリアル化されたバイト配列を並べ替えると、基になるデータ型の自然な並べ替え順序と同じ順序が生成されます

残念ながら、6か月間更新されていません。しかし、それは興味深いコンセプトです。

于 2013-08-09T22:52:13.920 に答える