2012-09-28 2 views
1

У меня есть некоторые вопросы относительно Hector Вставки данных двойных/поплавков в КассандреПочему я вставить двойную/поплавок колонку в Кассандре Гектора и получил неправильного значение INT базы данных

new Double("13.45")------->13.468259733915328 
new Float("64.13") ------->119.87449 

Когда я ввожу данные в Кассандре Гектор

TestDouble ch = new TestDouble("talend_bj", 
     "localhost:9160"); 
String family = "talend_1"; 
ch.ensureColumnFamily(family); 
List values = new ArrayList(); 
values.add(HFactory.createColumn("id", 2, StringSerializer.get(), 
     IntegerSerializer.get())); 
values.add(HFactory.createColumn("name", "zhang", 
     StringSerializer.get(), StringSerializer.get())); 
values.add(HFactory.createColumn("salary", 13.45, 
     StringSerializer.get(), DoubleSerializer.get())); 
ch.insertSuper("14", values, "user1", family, StringSerializer.get(), 
     StringSerializer.get()); 
StringSerializer se = StringSerializer.get(); 
MultigetSuperSliceQuery<String, String, String, String> q = me.prettyprint.hector.api.factory.HFactory 
     .createMultigetSuperSliceQuery(ch.getKeyspace(), se, se, se, se); 
// q.setSuperColumn("user1").setColumnNames("id","name") 
q.setKeys("12", "11","13", "14"); 
q.setColumnFamily(family); 
q.setRange("z", "z", false, 100); 
QueryResult<SuperRows<String, String, String, String>> r = q 
     .setColumnNames("user1", "user").execute(); 
Iterator iter = r.get().iterator(); 
while (iter.hasNext()) { 
    SuperRow superRow = (SuperRow) iter.next(); 
    SuperSlice s = superRow.getSuperSlice(); 
    List<HSuperColumn> superColumns = s.getSuperColumns(); 
    for (HSuperColumn superColumn : superColumns) { 
     List<HColumn> columns = superColumn.getColumns(); 
     System.out.println(DoubleSerializer.get().fromBytes(((String) superColumn.getSubColumnByName("salary").getValue()).getBytes())); 
    } 
} 

Вы можете увидеть 13.45, но я получаю значение столбца 13,468259733915328

ответ

0

Вы должны разбить проблему на две части. После написания, ЕСЛИ вы определили часть своей схемы ИЛИ используйте ключевое слово te ASSUME в командной строке cli, просмотрите данные в cassandra, чтобы убедиться, что это правильно. PlayOrm имеет этот тест EXACT блока (который находится на PlayOrm сверху Astyanax не Гектор), и она работает просто отлично .... Обратите внимание на сравнение в тесте -200.23 ...

https://github.com/deanhiller/playorm/blob/master/input/javasrc/com/alvazan/test/TestColumnSlice.java

После вниз , ваши данные в cassandra выглядят правильными? Если это так, проблема заключается в том, что вы читаете значение в коде, иначе это будет запись.

+0

Благодарим вас за ответ. Я проверяю результат в базе данных, это правильно. При чтении записи получается неправильный результат. –