scala - datastax cassandra java 驱动程序与 scala 转换相关的问题(播放 2.3.x)

标签 scala cassandra scala-collections datastax datastax-java-driver

这一切都发生在带有 scala 模板的 Play 2.3.x 应用程序中

我正在使用此导入:

import com.datastax.driver.core.Row

连同这个案例类

case class timeOnPage(ip: String, pages: Map[String, Long])

我使用以下代码生成带有 cassandra 行的 timeOnPage 实例:

 private def times(row: Row): timeOnPage =
    timeOnPage(row.getString("ip"), row.getMap("page", classOf[String], classOf[Long]).toMap)

代码编译正常,但运行时返回此错误:

[InvalidTypeException: Column page is a map of class java.lang.String->class java.lang.Long (CQL type map<varchar, bigint>), cannot be retrieve as a map of class java.lang.String->long]

我尝试了几种不同的方法来声明 classOf[Long],例如:

classOf[java.lang.Long]
Class.forName("java.lang.Long")

都不进行类型检查。

对此有什么见解吗?预先感谢您

最佳答案

这并不漂亮,但这会将您的 Map[String,java.lang.Long] 强制转换为 Map[String,Long] ,从而允许 java 驱动程序正确创建其预期类型的​​ Map,然后使用 asInstanceOf 将其强制转换为 map [字符串,长整型]:

private def times(row: Row): timeOnPage =
  timeOnPage(row.getString("ip"), row.getMap("page", classOf[String], classOf[java.lang.Long]).toMap.asInstanceOf[Map[String,Long]])

This comment提供了更多指导,例如创建隐式转换以从 Map[String, java.lang.Long] 转换为 Map[String, Long],例如:

import scala.collection.JavaConverters._

implicit def convMap(in: java.util.Map[String, java.lang.Long]): Map[String, Long] =
  in.asScala.toMap.mapValues(Long2long)

private def times(row: Row): timeOnPage =
  timeOnPage(row.getString("ip"), row.getMap("page", classOf[String], classOf[java.lang.Long]))

关于scala - datastax cassandra java 驱动程序与 scala 转换相关的问题(播放 2.3.x),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27933057/

相关文章:

scala - 为什么不可能(在 scala 中)在实现基类中提供抽象重写方法的实现

scala - flatMap 编译错误发现 : TraversableOnce[String] required: TraversableOnce[String]

scala - 如何将 "instantiate"抽象类放在父类(super class)中?

java - Spring Cassandra 模型映射

scala - 如何在 Scala 映射中优雅地处理 "Key not found"?

java - 在 Java 中如何获得表示 unsigned int 的字节?

database - Cassandra 连接失败

c++ - 我应该担心 Cassandra C++ 驱动程序的负载平衡选择吗?

scala - scala中的无符号整数

scala - Scala 集合上的高效分组聚合