/从卡桑德拉我有以下卡桑德拉模式:存储和检索的浮动[]使用赫克托
ColumnFamily: FloatArrays {
SCKey: SuperColumn Key (Integer) {
Key: FloatArray (float[]) {
field (String): value (String)
}
}
}
为了插入坚持这个模式我在赫克托创建下面的模板数据:
template = new ThriftSuperCfTemplate<Integer, FloatArray, String>(
keyspace, "FloatArrays", IntegerSerializer.get(),
FloatArraySerializer.get(), StringSerializer.get());
向(缩小)序列化FloatArray我创建(和单元测试)自定义序列:
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
}
难道我做一个概念性的错误,在这里,因为我是很新的卡桑德拉/赫克托?现在我甚至不知道哪里出了问题。串行器似乎没问题。你能否给我提供一些指示以继续我的搜索?非常感谢!
非常感谢你,克里斯,这解决了问题! – joost1024