2016-12-08 57 views
5

Poniżej znajduje się kodWiele konstruktorzy z tej samej liczby parametrów wyjątku podczas przekształcania danych w iskrą użyciu Scala

def findUniqueGroupInMetadata(sc: SparkContext): Unit = { 
    val merchantGroup = sc.cassandraTable("local_pb",  "merchant_metadata").select("group_name") 

try { 
    val filterByWithGroup = merchantGroup.filter { 
    row => 
     row.getStringOption("group_name") match { 
     case Some(s: String) if (s != null) => true 
     case None => false 
     } 
    }.map(row => row.getStringOption("group_name").get.capitalize) 


    //filterByWithGroup.take(15).foreach(data => println("merchantGroup => " + data)) 
    filterByWithGroup.saveToCassandra("local_pb", "merchant_group", SomeColumns("group_name")) 
} catch { 
    case e: Exception => println(e.printStackTrace()) 

} 

}

Exception =>

java.lang.IllegalArgumentException: Multiple constructors with the same number of parameters not allowed. 
    at com.datastax.spark.connector.util.Reflect$.methodSymbol(Reflect.scala:16) 
    at com.datastax.spark.connector.util.ReflectionUtil$.constructorParams(ReflectionUtil.scala:63) 
    at com.datastax.spark.connector.mapper.DefaultColumnMapper.<init>(DefaultColumnMapper.scala:45) 
    at com.datastax.spark.connector.mapper.LowPriorityColumnMapper$class.defaultColumnMapper(ColumnMapper.scala:47) 
    at com.datastax.spark.connector.mapper.ColumnMapper$.defaultColumnMapper(ColumnMapper.scala:51) 

Odpowiedz

4

znalazłem odpowiedź po zaglądanie do niektórych blogów.

Po przekonwertowaniu RDD [String] na RDD [Tuple1 [String]] wszystko poszło gładko. Zasadniczo, aby zapisać dane do Cassandry, dane muszą być typu RDD [TupleX [String]] tutaj x może być 1,2,3 ... lub dane mogą być RDD [SomeCaseClass]

+0

Wystąpił ten sam błąd wiadomość w innym kontekście (wywołanie deleteFromCassandra ze Spark DataFrame) i poprawka też zadziałała. –