将数据插入Cassandra时LongType和FloatType出现问题

将数据插入Cassandra时LongType和FloatType出现问题,cassandra,hector,Cassandra,Hector,我使用Hector将数据插入cassandra数据库,使用以下代码: mutator.addInsertion(key, columnfamily, HFactory .createStringColumn(dataproperties.getObjectIDcolumnName(), line.objectid)); mutator.addInsertion(key,columnfamily,

我使用Hector将数据插入cassandra数据库,使用以下代码:

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()