У меня есть следующая Cassandra схема:магазин и получить поплавок [] в/из Кассандры с помощью Гектора
ColumnFamily: FloatArrays {
SCKey: SuperColumn Key (Integer) {
Key: FloatArray (float[]) {
field (String): value (String)
}
}
}
Для того, чтобы вставить данные, которые прилипают к этой схеме я создал следующий шаблон в Hector:
template = new ThriftSuperCfTemplate<Integer, FloatArray, String>(
keyspace, "FloatArrays", IntegerSerializer.get(),
FloatArraySerializer.get(), StringSerializer.get());
к (де-) сериализовать FloatArray я создал (и протестированы) настраиваемой Serializer:
public class FloatArraySerializer extends AbstractSerializer<FloatArray> {
private static final FloatArraySerializer instance =
new FloatArraySerializer();
public static FloatArraySerializer get() {
return instance;
}
@Override
public FloatArray fromByteBuffer(ByteBuffer buffer) {
buffer.rewind();
FloatBuffer floatBuf = buffer.asFloatBuffer();
float[] floats = new float[floatBuf.limit()];
if (floatBuf.hasArray()) {
floats = floatBuf.array();
} else {
floatBuf.get(floats, 0, floatBuf.limit());
}
return new FloatArray(floats);
}
@Override
public ByteBuffer toByteBuffer(FloatArray theArray) {
float[] floats = theArray.getFloats();
ByteBuffer byteBuf = ByteBuffer.allocate(4 * descriptor.length);
FloatBuffer floatBuf = byteBuf.asFloatBuffer();
floatBuf.put(floats);
byteBuf.rewind();
return byteBuf;
}
}
Теперь идет сложный бит. Сохранение, а затем извлечение массива поплавков не возвращает тот же результат. Фактически, количество элементов в массиве не одинаково. Код я использую, чтобы получить результат показан ниже:
SuperCfResult<Integer, FloatArray, String> result =
template.querySuperColumns(hash);
for (FloatArray floatArray: result.getSuperColumns()) {
// Do something with the FloatArrays
}
ли я сделать концептуальную ошибку здесь, так как я совершенно новой для Кассандры/Hector? Прямо сейчас я даже не знаю, где это происходит. Сериализатор, похоже, в порядке. Не могли бы вы предоставить мне несколько указателей, чтобы продолжить мой поиск? Большое спасибо!
Спасибо, Крис, это решило проблему! – joost1024