将数据插入Cassandra时LongType和FloatType出现问题
我使用Hector将数据插入cassandra数据库,使用以下代码:将数据插入Cassandra时LongType和FloatType出现问题,cassandra,hector,Cassandra,Hector,我使用Hector将数据插入cassandra数据库,使用以下代码: mutator.addInsertion(key, columnfamily, HFactory .createStringColumn(dataproperties.getObjectIDcolumnName(), line.objectid)); mutator.addInsertion(key,columnfamily,
mutator.addInsertion(key, columnfamily, HFactory
.createStringColumn(dataproperties.getObjectIDcolumnName(),
line.objectid));
mutator.addInsertion(key,columnfamily,
HFactory.createColumn(dataproperties.getNumtvaluecolomnname(), java.lang.Float.valueOf(value), StringSerializer.get(), FloatSerializer.get()));
numvalue列定义为FloatTYPE
我在代码执行上没有错误,但是当我检查数据浮点值是否错误时(我有这样的值:C\xb3\x00\x00,当我期望41.0时)
正确插入字符串数据
如何正确插入Hector的数字数据以进行正确的查询
多谢各位 我认为您的列族定义中存在问题,请尝试以下方法
create column family columnfamily
with column_type = 'Standard'
and comparator = 'UTF8Type'
and default_validation_class = 'FloatType'
and key_validation_class = 'UTF8Type' ;
Insertion(key,columnfamily,
HFactory.createColumn(dataproperties.getNumtvaluecolomnname(),
java.lang.Float.valueOf(value), StringSerializer.get(),
me.prettyprint.cassandra.serializers.FloatSerializer.FloatSerializer.get()));
和获取数据
SliceQuery<String,String,byte[]> sliceQuery = HFactory.createSliceQuery(keyspace, se, se,BytesArraySerializer.get());
sliceQuery.setColumnFamily("columnfamily");
sliceQuery.setKey(key);
sliceQuery.setRange(null,null,true,10);
List<HColumn<String,byte[]>> hcolumns = sliceQuery.execute().get()
.getColumns();
for (HColumn<String, byte[]> hcolumn : hcolumns){
System.out.println("Name "+hcolumn.getName());
System.out.println("Value"+
FloatSerializer.get().fromBytes(hcolumn.getValue()));
}
SliceQuery SliceQuery=HFactory.createSliceQuery(keyspace,se,se,BytesArraySerializer.get());
sliceQuery.setColumnFamily(“columnfamily”);
sliceQuery.setKey(key);
sliceQuery.setRange(null,null,true,10);
List hcolumns=sliceQuery.execute().get()
.getColumns();
for(HColumn HColumn:hcolumns){
System.out.println(“Name”+hcolumn.getName());
System.out.println(“值”+
FloatSerializer.get().fromBytes(hcolumn.getValue());
}
FloatSerializer.get().fromBytes(hcolumn.getValue())将值字节数组转换为float@asma您可以发布列族定义吗…….这是我的列族定义创建列族条目,使用comparator=UTF8Type和key\u validation\u class=UTF8Type和column\u metadata=[{列名称:id,验证类:UTF8Type}{列名称:objectid,验证类:UTF8Type,索引类型:KEYS}{列名称:time,验证类:LongType,索引类型:KEYS}{列名称:label,验证类:UTF8Type,索引类型:KEYS}{列名称:text\val,验证类:UTF8Type,索引类型:KEYS}{列名称:num\u val,验证类:FloatType,索引类型:KEYS}];当我尝试将默认验证类设置为floatType时,我无法再插入字符串值!!我真的不知道该怎么做do@asma如果您没有声明默认的_验证类,那么cassandra将在字节数组中存储一个值。我添加了如何获取字节数组值的代码。感谢AMit,我解决了这个问题,它位于dataproperties.getNumtvaluecolomnnam上e()