Spark Build Custom Column Function, benutzerdefinierte Funktion

Ich verwende Scala und möchte meine eigene DataFrame-Funktion erstellen. Zum Beispiel möchte ich eine Spalte wie ein Array behandeln, jedes Element durchlaufen und eine Berechnung durchführen.

Zu Beginn versuche ich, meine eigene getMax-Methode zu implementieren. Die Spalte x hätte also die Werte [3,8,2,5,9] und die erwartete Ausgabe der Methode wäre 9.

Hier ist, wie es in Scala aussieht

def getMax(inputArray: Array[Int]): Int = {
   var maxValue = inputArray(0)
   for (i <- 1 until inputArray.length if inputArray(i) > maxValue) {
     maxValue = inputArray(i)
   }
   maxValue
}

Das ist, was ich bisher habe, und diesen Fehler bekommen

"value length is not a member of org.apache.spark.sql.column", 

und ich weiß nicht, wie ich die Spalte durchlaufen soll.

def getMax(col: Column): Column = {
var maxValue = col(0)
for (i <- 1 until col.length if col(i) > maxValue){
    maxValue = col(i)
}
maxValue

}

enn ich meine eigene Methode implementieren kann, erstelle ich eine Spaltenfunktio

val value_max:org.apache.spark.sql.Column=getMax(df.col(“value”)).as(“value_max”)

Und dann hoffe ich, dies in einer SQL-Anweisung verwenden zu können, zum Beispiel

val sample = sqlContext.sql("SELECT value_max(x) FROM table")

und die erwartete Ausgabe wäre 9 bei gegebener Eingabespalte [3,8,2,5,9]

Ich verfolge eine Antwort von einem anderen ThreadSpark Scala - Wie iteriere ich Zeilen in Datenrahmen und füge berechnete Werte als neue Spalten des Datenrahmens hinzu wo sie eine private Methode für die Standardabweichung erstellen. Die Berechnungen, die ich durchführen werde, sind komplexer (z. B. ich werde jedes Element in der Spalte vergleichen), gehe ich in die richtige Richtung oder sollte ich mich mehr mit benutzerdefinierten Funktionen befassen?

Antworten auf die Frage(4)

Ihre Antwort auf die Frage