Я использую HBase для хранения длинных значений в приложении hadoop. Они хранятся следующим образом, поскольку сигнатуры метода HBase работают в байтовых массивах:
Bytes.toBytes(timestamp)
Где timestamp
- это long
.
Это, в свою очередь, используется в других частях приложения, как это
Bytes.toLong(scanResult.getValue("main", "ts"))
Итак, мы знаем, что это согласованно и правильно хранится.
Это примерная временная меткасохранено: 1527529282000
На стороне java это преобразуется в байтовый массив:
[0, 0, 0, 0, 91, 12, 63, 66]
Я пытаюсь написать задачу на языке cethon для проверки конвейера hadoop с несколькими конкретными случаями, установленными каждыйдень.
Для этого мне нужно написать такую же информацию с помощью happybase
Я уже могу создать строку аналогичным образом:
hbase_timestamp = struct.pack('l', timestamp)
profiles_htable.put(hbase_row, {'main:ts': hbase_timestamp})
Проблема в том, что когда я декодирую это на стороне Java, значение совершенно неверное.
Это то, что восстанавливает тот же Java-декодер:
-3451490525482254
И этобайтовый массив, который фактически был сохранен кодом Python:
[-48, 25, -41, -89, 99, 1, 0, 0]
Как я могу хранить длинное значение, которое будет точно декодировано в Java как байтовый массив из Python?