2017-01-06 5 views
1

Ich benutze Spark mit Scala, um einige Datenverarbeitung zu tun. Ich habe XML-Daten dem Datenrahmen zugeordnet. Ich übergebe eine Zeile als Parameter an die UDF und versuche, zwei komplexe Typenobjekte als Liste zu extrahieren. Funke gibt mir folgende Fehlermeldung:Return Seq [Zeile] von Spark-Scala UDF

Exception in thread "main" java.lang.UnsupportedOperationException: Schema for type org.apache.spark.sql.Row is not supported

def testUdf = udf((testInput: Row) => { 
    val firstObject = testInput.getAs[Row]("Object1") 
    val secondObject = testInput.getAs[Row]("Object2") 
    val returnObject = Seq[firstObject,secondObject] 

    returnObject 
}) 

Könnten Sie mir bitte sagen, was ich falsch mache. Vielen Dank.

Antwort

2

UDF kann Objekte nicht zurückgeben. Der Rückgabetyp muss einer der Typen sein, die in der Spalte Werttyp in Scala in Data Types table aufgelistet sind.

Gute Nachrichten gibt es keine Notwendigkeit für UDF hier. Wenn Object1 und Object2das gleiche Schema haben (wäre es nicht anders sowieso arbeiten) Sie array Funktion nutzen zu können:

import org.apache.spark.sql.functions._ 

df.select(array(col("Object1"), col("Object2")) 

oder

df.select(array(col("path.to.Object1"), col("path.to.Object2")) 

wenn Object1 und Object2 sind nicht Top-Level-Spalten.