我有以下Cassandra表模式:-
CREATE TABLE test (
id text,
stats frozen<map<text, text>> )
我创建了scala应用程序以从cassandra中提取数据,经过一些操作后,该数据将再次更新为cassandra。
val result = session.execute("Select * from test where id= 'testid'")
val resultList = result.all()
val rows = resultList.iterator()
if (resultList.size() > 0) {
while (rows.hasNext()) {
val curRow = rows.next()
val ID = curRow.getString("id")
val statistics = curRow.getMap[String,String] ??????
}
}
cassandra表中的数据行是这样的:-
('testid',{'a1': '10', 'a2': '0', 'a3': '0', 'a4': '22', 'd1': '0', 'd2': '1', 'd3': '1', 'd4': '0', 'exb': '0', 'inb': '6', 'satno': '10'})
('id123',{'a1': '10', 'a2': '0', 'd1': '0', 'd2': '1', 'd3': '1', 'd4': '0'})
我想将我的统计信息字段准确地映射到统计信息中。我应该怎么做,我在stats列中的字段对于1行是动态的,它可能有10对其他行的键值对,它可能有7对键值。
谢谢
答案 0 :(得分:0)
您需要编写如下内容:
val statistics = curRow.getMap[String,String]("stats",
classOf[String], classOf[String])
例如
val cluster = Cluster.builder().addContactPoint("127.0.0.1").build()
val session = cluster.connect()
val result = session.execute("Select * from test.fmtest where id= 'id123'")
val resultList = result.all()
val rows = resultList.iterator()
if (resultList.size() > 0) {
while (rows.hasNext()) {
val curRow = rows.next()
val ID = curRow.getString("id")
val statistics = curRow.getMap[String,String]("stats",
classOf[String], classOf[String])
println("id=" + ID + ", stats=" + statistics)
}
}
cluster.close()
将打印:
id=id123, stats={a1=10, a2=0, d1=0, d2=1, d3=1, d4=0}