如何在Scala的结果集中从Cassandra访问map< text,text>?

wooyq4lh  于 12个月前  发布在  Cassandra
关注(0)|答案(2)|浏览(95)

所以,基本上,我使用Spark连接到Cassandra数据库,该数据库具有类型为“map<text,text>”的列。我可以读取其他列的值,但不能读取此列的值。基本上,我的代码是:

val query = "SELECT * FROM mydatabase.mytable;"
    val conf = spark.sparkContext.getConf
    val connector = CassandraConnector.apply(conf);
    val session = connector.openSession();
    val rs = session.execute(query)  //resultset

    val rows = rs.all().map { row =>
    val pk = row.getString("pk")
    val column2= row.getString("column2")
    val column3 = row.getInt("column3")
    val mapColumn = row.getMap[String, String]("mapColumn")
    Row(pk , column2, column3 , mapColumn )
    }

我可以阅读其他3列,除了Map之一。无法在网上找到解决方案。如何读取Map类型值?
这是我尝试运行时得到的错误
错误:重载方法值getMap,其中包含替代项:[KeyT,ValueT](x$1:com.datastax.oss.driver.API.core.CqlIdentifier,x$2:类[KeyT],x$3:Class[ValueT])java.util.Map[KeyT,ValueT] [KeyT,ValueT](x$1:字符串,x$2:类[KeyT],x$3:Class[ValueT])java.util.Map[KeyT,ValueT] [KeyT,ValueT](x$1:Int,x$2:类[KeyT],x$3:Class[ValueT])java.util.Map[KeyT,ValueT]无法应用于(String)val mapColumn= row.getMap(“mapColumn”)

nbewdwxp

nbewdwxp1#

错误消息说明了一切:没有这样的方法getMap("columnName"),但有以下一个:

getMap("columnName",
  classOf[String], // key class
  classOf[String]) // value class
xdnvmnnf

xdnvmnnf2#

我设法使它使用:
val mapObject = row.getObject("mapColumn")
val mapColumn = mapObject.asInstanceOf[java.util.Map[String, String]].toMap
登记一下,万一能帮上忙。

相关问题