scala.ScalaReflectionException:<none>不是一个术语

Pau*_*ulo 10 scala apache-spark spark-cassandra-connector

我在Spark中有以下代码:

rdd
  .map(processFunction(_))
  .saveToCassandra("keyspace", "tableName")
Run Code Online (Sandbox Code Playgroud)

哪里

def processFunction(src: String): Seq[Any] =
  src match {
   case "a" => List(A("a", 123112, "b"), A("b", 142342, "c"))
   case "b" => List(B("d", 12312, "e", "f"), B("g", 12312, "h", "i"))
  }
Run Code Online (Sandbox Code Playgroud)

哪里:

case class A(entity: String, time: Long, value: String)
case class B(entity: String, time: Long, value1: String, value2: String)
Run Code Online (Sandbox Code Playgroud)

saveToCassandra期望一组对象并使用Seq[Any]作为返回类型来包含两者Seq[A]和具有异常的Seq[B]中断saveToCassandra- scala.ScalaReflectionException: <none>不是一个术语.这种行为可能是什么原因?

Rob*_*tty 1

def processFunction(src: String): (Any, Any) = {
  src match {
   case "a" => (A("a", 123112, "b"), A("b", 142342, "c"))
   case "b" => (B("d", 12312, "e", "f"), B("g", 12312, "h", "i"))
  }
}
Run Code Online (Sandbox Code Playgroud)

类似的东西可能会起作用。不过,我还没有过多地尝试在 cassandra 中保存对象。也不将任何内容与 cassandra 一起使用。然而,上面没有案例类和任何问题的解决方案是我最近解决这个问题的方法。例如,下面的代码就可以工作。

def processFunction(src: String): (String, Int, String) = {
   src match {
     case "a" => ("a", 123112, "b")
     case "b" => ("d", 12312, "e")
   }
}
Run Code Online (Sandbox Code Playgroud)

然而,这并不完全是您想要的。所以是的,随你所欲。