【问题标题】:How to use LongSerializer in scala with hector?如何在带有赫克托的scala中使用LongSerializer?
【发布时间】:2013-10-28 22:02:46
【问题描述】:
val mutator=HFactory.createMutator(keyspace,StringSerializer.get())
mutator.addInsertion("rahul", "user", HFactory.createColumn("birth_year", 1990,   
StringSerializer.get(), LongSerializer.get()))//error in LongSerializer.get() as  
mutator.execute()

我正在使用上面的 LongSerializer,但出现以下错误。 说明 资源路径 位置 类型 类型不匹配;找到:me.prettyprint.cassandra.serializers.LongSerializer
必需:me.prettyprint.hector.api.Serializer[Any] 注意:Long <: any me.prettyprint.cassandra.serializers.longserializer me.prettyprint.cassandra.serializers.abstractserializer java trait t>_ <: Any。 (SLS 3.2.10) User.scala /winoria/app/models 第 22 行 Scala 问题

告诉我解决方案。

【问题讨论】:

  • 我认为使用.asInstanceOf[Serializer[Any]] 投射LongSerializer 是安全的。
  • 我以前用过这个。这种方式仅适用于使用 IntegerSerializer。否则,它会给出错误-
  • Java.lang.Integer 不能转换为 java.lang.long

标签: scala cassandra hector


【解决方案1】:

这里发生了几件事。

首先,Java 不允许原始类型作为泛型,因此 Hector 的 LongSerializer 是一个 AbstractSerializer[java.lang.Long]。但是你在 Scala 中工作,所以你需要一个 AbstractSerializer[scala.Long]。根据具体情况,Scala 的 Long 可以是原始 long 或 java.lang.Long。好消息是 Scala 足够聪明,可以确定使用什么以及何时使用。你需要的是一个小的类型强制: LongSerializer.get().asInstanceOf[Serializer[Long]]

另一个怀疑是你需要 me.prettyprint.hector.api.Serializer[Any]。看起来您调用方法的任何内容都缺少正确的类型声明。周围的代码示例将有助于进一步诊断。

编辑: 感谢您发布周围的代码。看起来你有类型分歧。 createColumn[N, V] 被推断为 createColumn[String, Int],因为您提供的 1990 参数是一个 Int。这被转换为 java.lang.Int,它是一个类并且没有像基元那样的类型转换。这就是您收到错误“int cannot be cast to long”的原因。

val mutator = HFactory.createMutator(keyspace, StringSerializer.get)
mutator.addInsertion(
  "rahul", "user",
  HFactory.createColumn( // Either do: HFactory.createColumn[String, Long]
    "birth_year", 1990L, // Or make sure the type is inferred as Long
    StringSerializer.get,
    // Coerce serializer to scala.Long
    LongSerializer.get.asInstanceOf[Serializer[Long]]))
mutator.execute()

【讨论】:

  • 我以前用过这个。这种方式仅适用于使用 IntegerSerializer。否则,它会给出错误-
  • Java.lang.Integer 不能转换为 java.lang.long
  • 看起来您正在尝试使用长序列化程序序列化整数。
  • @JagveerSinghRajput 是的,发布一些周围的代码可能会有所帮助。您可以编辑您的问题以包含它。
猜你喜欢
  • 2013-07-10
  • 2011-12-19
  • 2012-07-16
  • 1970-01-01
  • 2013-03-17
  • 1970-01-01
  • 2013-05-01
  • 2012-07-16
  • 2012-02-23
相关资源
最近更新 更多