【问题标题】:problems with LongType and FloatType when inserting data into Cassandra将数据插入 Cassandra 时出现 LongType 和 FloatType 的问题
【发布时间】:2014-07-07 11:27:41
【问题描述】:

我使用 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 的数字数据以便进行正确查询

谢谢。

【问题讨论】:

  • @asma 你能发布列族定义.......

标签: cassandra hector


【解决方案1】:

我认为你的列族定义有问题,试试这个

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

FloatSerializer.get().fromBytes(hcolumn.getValue()) 将值字节数组转换为浮点数

【讨论】:

  • 这是我的colomn家族定义
  • 使用比较器创建列族条目 = UTF8Type AND key_validation_class=UTF8Type AND column_metadata = [ {column_name: id , validation_class: UTF8Type} {column_name: objectid, validation_class: UTF8Type, index_type: KEYS} {column_name: time ,validation_class:LongType,index_type:KEYS} {column_name:标签,validation_class:UTF8Type,index_type:KEYS} {column_name:text_val,validation_class:UTF8Type,index_type:KEYS} {column_name:num_val,validation_class:FloatType,index_type:KEYS}];
  • 当我尝试将默认验证类设置为 floatType 时,我无法再插入字符串值了!!我真的不知道该怎么办
  • @asma 如果您没有声明 default_validation 类,则 cassandra 将值存储在字节数组中。我添加了如何获取字节数组值的代码。
  • 感谢我解决了这个问题,它在 dataproperties.getNumtvaluecolomnname() 上
猜你喜欢
  • 2013-02-25
  • 1970-01-01
  • 2020-08-10
  • 1970-01-01
  • 2020-12-25
  • 2011-01-21
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多