【发布时间】:2017-02-08 21:03:13
【问题描述】:
我想将一些 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 非常简单,但在我的例子中,它可以返回原始类型或用户定义的案例类类型。任何想法/指针将不胜感激。谢谢。
【问题讨论】:
标签: scala apache-spark apache-spark-sql spark-dataframe udf