2016-10-10 3 views
0

ich nächsten Datenrahmen habe:UDF-Funktion für Datentyp Guss, Scala

df.show() 

+---------------+----+ 
|    x| num| 
+---------------+----+ 
|[0.1, 0.2, 0.3]| 0| 
|[0.3, 0.1, 0.1]| 1| 
|[0.2, 0.1, 0.2]| 2| 
+---------------+----+ 

Dieser Datenrahmen hat Datentypen von Spalten folgen:

df.printSchema 
root 
|-- x: array (nullable = true) 
| |-- element: double (containsNull = true) 
|-- num: long (nullable = true) 

Ich versuche, innerhalb von Datenrahmen zu dem FloatArray derzeit die DoubleArray zu konvertieren . Ich mache es mit der nächsten Anweisung von udf:

val toFloat = udf[(val line: Seq[Double]) => line.map(_.toFloat)] 
val test = df.withColumn("testX", toFloat(df("x"))) 

Dieser Code funktioniert zur Zeit nicht. Kann jemand mit mir die Lösung teilen, wie man das Array ändert Typ in Dataframe?

Was ich will, ist:

df.printSchema 
root 
|-- x: array (nullable = true) 
| |-- element: float (containsNull = true) 
|-- num: long (nullable = true) 

Diese Frage beruht auf der Frage How tho change the simple DataType in Spark SQL's DataFrame

Antwort

1

Ihre udf falsch deklariert wird. Sie sollten es folgendermaßen schreiben:

val toFloat = udf((line: Seq[Double]) => line.map(_.toFloat)) 
+0

@cheseaus, vielen Dank. Ich wusste nicht, dass Val überflüssig ist und Klammern falsch sind. Ich lerne gerade jetzt udf Syntax und Verwendung – Guforu