我正在使用datastax并希望从Cassandra中检索Map
Cassandra在Java中使用String,bigint,bigint map映射为long,但我不能使用基本类型的Map。那么如何使用Map呢?
下面是我的表创建脚本
CREATE TABLE IF NOT EXISTS dealsstorea.deals1(
otla text,
dtla text ,
**types Map < text,bigint >**,
travelers bigint,
pkgRatePlanCode text,
pkgRoomTypeCode text,
numRooms bigint,
PRIMARY KEY ((...),
..));
答案 0 :(得分:2)
如果我正确理解了您的问题,那么您正在使用Java驱动程序从具有Map类型列的CQL表中进行选择,并且您希望将其加载到Java对象中。
如果是这种情况,请使用Java TreeMap
Map<String, Long> myMap = new TreeMap<String, Long>();
Java类型String和Long映射到CQL text和bigint。
答案 1 :(得分:1)
下面我用来将地图数据类型转换为字符串的代码。
--------代码-----------------------
public static String getMaptoSring(DataType dataType,Row row,String columnName)抛出ClassNotFoundException {
String mapstr = "";
if(row.getColumnDefinitions().getType(columnName).getName().name().equalsIgnoreCase("map"))
{
Map<?, ?> map = row.getMap(columnName, Class.forName("java.lang.String"), Class.forName("java.lang.String"));
Set<?> set = map.keySet();
Iterator setIterator = set.iterator();
while(setIterator.hasNext()){
Object key = setIterator.next();
String value = map.get(key).toString();
if(mapstr =="" )
mapstr="{"+key.toString()+":"+value;
else
mapstr = mapstr+","+key.toString()+":"+value;
}
mapstr = mapstr+"}";
//System.out.println("Map Key and value are as following: Key :: "+ key.toString() + ", value :: "+ value);
}
return mapstr;
}