je le schéma Cassandra suivant:magasin et récupérer un flotteur [] à/de Cassandra avec Hector
ColumnFamily: FloatArrays {
SCKey: SuperColumn Key (Integer) {
Key: FloatArray (float[]) {
field (String): value (String)
}
}
}
Afin d'insérer des données qui adhère à ce schéma, j'ai créé le modèle suivant à Hector:
template = new ThriftSuperCfTemplate<Integer, FloatArray, String>(
keyspace, "FloatArrays", IntegerSerializer.get(),
FloatArraySerializer.get(), StringSerializer.get());
Pour (dé) sérialisation du FloatArray j'ai créé (et testée en usine) une coutume sérialiseur:
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;
}
}
Maintenant vient le peu difficile. Stocker, puis récupérer un tableau de flottants ne retourne pas le même résultat. En fait, le nombre d'éléments dans le tableau n'est même pas le même. Le code que j'utilise pour récupérer le résultat est indiqué ci-dessous:
SuperCfResult<Integer, FloatArray, String> result =
template.querySuperColumns(hash);
for (FloatArray floatArray: result.getSuperColumns()) {
// Do something with the FloatArrays
}
-je faire une erreur conceptuelle ici depuis que je suis tout à fait nouveau pour Cassandra/Hector? À l'heure actuelle, je n'ai même pas la moindre idée de ce qui ne va pas. Le Serializer semble aller bien. Pouvez-vous s'il vous plaît me fournir quelques indications pour continuer ma recherche? Merci beaucoup!
Merci beaucoup Chris, ceci a résolu le problème! – joost1024