Używam Scala i chcę zbudować własną funkcję DataFrame. Na przykład chcę traktować kolumnę jak tablicę, iterować po każdym elemencie i wykonywać obliczenia.Funkcja Spark Build Custom, zdefiniowana przez użytkownika funkcja
Na początek próbuję wdrożyć własną metodę getMax. Więc kolumna x miałoby wartości [3,8,2,5,9], a oczekiwany wynik metody byłoby 9.
Oto jak to wygląda w Scala
def getMax(inputArray: Array[Int]): Int = {
var maxValue = inputArray(0)
for (i <- 1 until inputArray.length if inputArray(i) > maxValue) {
maxValue = inputArray(i)
}
maxValue
}
ten jest to, co mam do tej pory, i dostaję ten błąd i nie wiem jak inaczej iterować przez kolumnę.
def getMax(col: Column): Column = {
var maxValue = col(0)
for (i <- 1 until col.length if col(i) > maxValue){
maxValue = col(i)
}
maxValue
}
Gdy jestem w stanie realizować własną metodę, będę tworzyć funkcję kolumnową
val value_max:org.apache.spark.sql.Column=getMax(df.col(“value”)).as(“value_max”)
A potem mam nadzieję być w stanie wykorzystać to w SQL, np
val sample = sqlContext.sql("SELECT value_max(x) FROM table")
i oczekiwanego wyjściowy będzie 9 danej kolumny sterującej [3,8,2,5,9]
Podążam za odpowiedzią z innego wątku Spark Scala - How do I iterate rows in dataframe, and add calculated values as new columns of the data frame, gdzie tworzy ona prywatną metodę odchylenia standardowego. Obliczenia, które zrobię, będą bardziej skomplikowane niż te (np. Będę porównywał każdy element w kolumnie), czy podążę we właściwym kierunku, czy powinienem bardziej przyjrzeć się funkcjom zdefiniowanym przez użytkownika?
Proszę pokazać swoje wejście i wyjście/oczekiwane dataframes. Użyj 'show'. –
Witam @JacekLaskowski dzięki za komentarz, zredagowałem pytanie, aby było jaśniejsze, co chciałbym osiągnąć. – other15