5 Stimmen

HBase: Filter funktioniert nicht für negative Ganzzahlen

Wir haben QualifierFilter sowie ValueFilter (unter Verwendung von BinaryComparator) von Hbase erfolgreich implementiert und sie funktionieren gut für die meisten unserer Fälle. Allerdings versagen sie bei Fällen wie number > -10 oder number < -10

Bitte beachten Sie, dass number = -10 einwandfrei funktioniert. Auch, number > 10 und number < 10 funktionieren einwandfrei.

Wenn Sie den Code sehen möchten, überprüfen Sie bitte folgende Links:
1. QualifierFilter - Relevante Zeilen sind 126-142
2. Value Filter - Relevante Zeilen sind 107-128

Laut diesem Blog kann dies ein Problem mit der Serialisierung sein, wenn wir negative Werte für Zeilenbezeichner speichern möchten, und wir sollten unsere eigenen Serialisierer für den Vergleich schreiben.
Daher wollten wir wissen:
1. Ist es wirklich notwendig, in diesem Fall unseren eigenen Serialisierer zu schreiben?
2. Wenn ja, wie? Ein Beispiel wäre eine große Hilfe.

3voto

Easility Punkte 716

Da Hbase nur BinaryComparators und keine anderen 'getypten' Comparators hat, kann es nicht nach negativen Ganzzahlen filtern, da es das Zweierkomplement der negativen Zahl speichert. Weiterhin wäre die binäre Darstellung einer negativen 2er-Komplement-Ganzzahl lexikographisch nach der größten positiven Zahl und deshalb hat es nicht funktioniert.

Die Lösung besteht darin, das Vorzeichenbit der Zahl zu ändern. Danach funktioniert alles einwandfrei. Bitte beachten Sie, dass dies nur für Ganzzahlen und nicht für Float-Typen erforderlich ist.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X