获取斯卡拉的卡桑德拉冰冻地图

时间:2018-07-30 10:40:38

标签: scala cassandra cassandra-3.0

我有以下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对键值。

谢谢

1 个答案:

答案 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}