У меня есть несколько 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. Любые мысли / указатели будут высоко оценены. Спасибо.