2015-11-19 8 views
9

Mam następujący fragment kodu w Spark:scala.ScalaReflectionException: <none> nie jest terminem

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

Gdzie

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

Gdzie:

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

saveToCassandra spodziewa kolekcji obiektów i użycie Seq[Any] jako typu powrotu, który będzie zawierał zarówno Seq[A] i Seq[B] zerwania saveToCassandra z wyjątkiem - scala.ScalaReflectionException: <none> nie jest terminem. Jaki może być powód takiego zachowania?

+0

Rozwiązałeś to? Obecnie ma ten sam problem. – LiMuBei

Odpowiedz

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

Coś w tym stylu może działać. Nie grałem jednak zbyt dużo przy zapisywaniu obiektów w Kasandra. Ani nie używa się żadnego z kassandra. Jednak powyższe rozwiązanie bez klas przypadków i anys wyjaśnia, jak ostatnio rozwiązałem taki problem. Na przykład poniższy działałby.

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

Jednak nie jest to dokładnie to, co chcesz. Więc tak, weź to za co chcesz.

0

Stawiłem czoła temu problemowi i zastosowanie w tym przypadku klasy przypadku pomoże rozwiązać ten problem.

Poniżej znajduje się przykład.

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

i zastosować ten przypadek klasę na 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 

Rozwiązany problem "brak" nie jest problemem warunkowym.

Powiązane problemy