У меня есть несколько UDF, которые я хотел бы передать как аргумент функции вместе с кадрами данных.Spark UDF как параметр функции, UDF не находится в области функций
Одним из способов сделать это может быть создание UDF внутри функции, но это создаст и уничтожит несколько экземпляров UDF без повторного использования, что может быть не лучшим способом подойти к этой проблеме.
Вот пример кусок кода -
val lkpUDF = udf{(i: Int) => if (i > 0) 1 else 0}
val df = inputDF1
.withColumn("new_col", lkpUDF(col("c1")))
val df2 = inputDF2.
.withColumn("new_col", lkpUDF(col("c1")))
Вместо того, чтобы делать выше, я бы в идеале хотели бы сделать что-то вроде этого -
val lkpUDF = udf{(i: Int) => if (i > 0) 1 else 0}
def appendCols(df: DataFrame, lkpUDF: ?): DataFrame = {
df
.withColumn("new_col", lkpUDF(col("c1")))
}
val df = appendCols(inputDF, lkpUDF)
выше UDF довольно проста, но в моем случае он может вернуть примитивный тип или определяемый пользователем тип класса case. Любые мысли/указатели были бы высоко оценены. Благодарю.
Спасибо, septra. Вы правы, что я ударил вышеуказанную ошибку. Но я, кажется, ударил эту ошибку, даже когда я пытаюсь вернуть только класс case. http://stackoverflow.com/questions/42121649/schema-for-type-any-is-not-supported – Yash