如何在 Scala Spark 的 where 子句中使用 UDF

How to use UDF in where clause in Scala Spark

我正在尝试检查 Dataframe 中的 2 个 Double 列是否在一定程度上相等,因此 49.999999 应该等于 50。是否可以创建 UDF 并在 where 子句中使用它?我在 Scala 中使用 Spark 2.0。

您可以使用 udf 但没有必要:

import org.apache.spark.sql.functions._

val precision: Double = ???

df.where(abs($"col1" - $"col2") < precision)

udf 调用的工作方式相同,但效率较低

df.where(yourUdf($"col1", $"col2"))

假设 ctx 是 SQL 上下文

ctx.udf.register("areEqual", (x: Double, y: Double, precision : Double) => abs(x-y)< prescision

然后是

df.where(areEqual($"col1",$"col2",precision))