11

Spark に次のコードがあります。

rdd
  .map(processFunction(_))
  .saveToCassandra("keyspace", "tableName")

どこ

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"))
  }

どこ:

case class A(entity: String, time: Long, value: String)
case class B(entity: String, time: Long, value1: String, value2: String)

saveToCassandraはオブジェクトのコレクションを期待しSeq[Any]、戻り値の型として両方を含むように使用し、例外Seq[A]Seq[B]中断saveToCassandraします -scala.ScalaReflectionException: <none>は用語ではありません。この動作の理由は何でしょうか?

4

2 に答える 2

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"))
  }
}

そのようなものがうまくいくかもしれません。ただし、cassandra でオブジェクトを保存することについては、あまりいじっていません。カサンドラと一緒に使用することもありません。ただし、ケースクラスとanysを使用しない上記のソリューションは、最近このような問題を解決した方法です。たとえば、以下は機能します。

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

ただし、それはまさにあなたが望むものではありません。ええ、あなたが望むもののためにそれを取ってください。

于 2016-12-22T17:40:02.277 に答える