所以,基本上,我使用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”)
2条答案
按热度按时间nbewdwxp1#
错误消息说明了一切:没有这样的方法
getMap("columnName")
,但有以下一个:xdnvmnnf2#
我设法使它使用:
val mapObject = row.getObject("mapColumn")
val mapColumn = mapObject.asInstanceOf[java.util.Map[String, String]].toMap
登记一下,万一能帮上忙。