Scala读取Cassandra中Map(varchar,double)类型数据报错求助
解决Scala读取Cassandra Map(varchar, double)类型的报错问题
这个问题我之前也踩过坑,核心原因很明确:Cassandra Java驱动的getMap方法要求泛型类型参数必须是引用类型,而你传入的classOf[Double]在Scala语境下对应的是Java的基本类型double的Class对象——基本类型是不能作为泛型参数使用的,这就直接触发了IllegalArgumentException: Primitive type 'double' used as type parameter这个错误。
快速解决方案
把基本类型的Class换成对应的包装类Class,也就是java.lang.Double(Java里的Double包装类)。修改后的代码如下:
row.getMap("column_name", classOf[String], classOf[java.lang.Double])
优化写法(可选)
如果觉得java.lang.Double写起来太冗长,可以通过导入别名简化代码:
import java.lang.Double as JDouble // 之后使用别名即可 row.getMap("column_name", classOf[String], classOf[JDouble])
额外说明
如果你后续打算用更贴合Scala风格的方式处理Cassandra数据,也可以考虑使用DataStax官方的Scala驱动(适配Cassandra 3.0版本),它会自动处理基本类型和包装类的转换,代码会更简洁直观,比如可以直接用:
row.get[Map[String, Double]]("column_name")
内容的提问来源于stack exchange,提问作者priyanka goel
相关产品推荐
相关产品推荐

