2015-11-19 10 views
9

habe ich das folgende Stück Code in Funken:scala.ScalaReflectionException: <none> ist kein Begriff

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

Wo

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

Wo:

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

saveToCassandra eine Sammlung erwartet von Objekten und Seq[Any] als Rückgabetyp, um beideenthaltenund Seq[B] bricht saveToCassandra mit Ausnahme - scala.ScalaReflectionException: <none> ist kein Begriff. Was könnte der Grund für dieses Verhalten sein?

+0

Haben Sie das gelöst? Derzeit mit dem gleichen Problem. – LiMuBei

Antwort

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

So etwas mag funktionieren. Ich habe jedoch nicht viel mit dem Speichern von Objekten in Cassandra herumgespielt. Ich benutze auch keine mit Cassandra. Die obige Lösung ohne die Fallklassen und Anys ist jedoch, wie ich kürzlich ein solches Problem gelöst habe. Zum Beispiel würde das Folgende funktionieren.

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

Das ist jedoch nicht genau das, was Sie wollen. Also ja, nimm es für das, was du willst.

0

Ich war mit diesem Problem konfrontiert und die Anwendung der Fallklasse hilft Ihnen bei der Lösung dieses Problems.

Unten ist das Beispiel.

case class test_row(col1: String, 
       col2: String, 
       col3: String) 

Und wenden Sie diese Fallklasse auf eine DF/RDD.

df.map { x => test_row.apply(x.get(0).asInstanceOf[String], x.get(1).asInstanceOf[String],x.get(2).asInstanceOf[String]) 
}.rdd.saveToCassandra 

Diese aufgelöste "keine" ist kein Begriff Problem.

Verwandte Themen