Spark Build Custom Column Function, определяемая пользователем функция
Я использую Scala и хочу создать свою собственную функцию DataFrame. Например, я хочу обработать столбец как массив, пройтись по каждому элементу и произвести расчет.
Для начала я пытаюсь реализовать свой собственный метод getMax. Таким образом, столбец x будет иметь значения [3,8,2,5,9], и ожидаемый результат метода будет 9.
Вот как это выглядит в 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
}
Это то, что я до сих пор и получаю эту ошибку
"value length is not a member of org.apache.spark.sql.column",
и я не знаю, как еще перебрать столбец.
def getMax(col: Column): Column = {
var maxValue = col(0)
for (i <- 1 until col.length if col(i) > maxValue){
maxValue = col(i)
}
maxValue
}
Как только я смогу реализовать свой собственный метод, я создам функцию столбца
val value_max:org.apache.spark.sql.Column=getMax(df.col(“value”)).as(“value_max”)
И тогда я надеюсь, что смогу использовать это в инструкции SQL, например
val sample = sqlContext.sql("SELECT value_max(x) FROM table")
и ожидаемый результат будет 9, учитывая входной столбец [3,8,2,5,9]
Я слежу за ответом из другой веткиSpark Scala - Как перебирать строки в фрейме данных и добавлять вычисляемые значения в качестве новых столбцов фрейма данных где они создают частный метод для стандартного отклонения. Расчеты, которые я сделаю, будут более сложными, чем это, (например, я буду сравнивать каждый элемент в столбце), иду ли я в правильных направлениях или я должен больше смотреть на пользовательские функции?