我试图检查数据帧中的2个双列是否相等到一定程度的精度,因此49.999999应该等于50.是否可以创建UDF并在where子句中使用它?我在Scala中使用Spark 2.0。
答案 0 :(得分:5)
您可以使用udf
,但不需要:
import org.apache.spark.sql.functions._
val precision: Double = ???
df.where(abs($"col1" - $"col2") < precision)
udf
调用会以相同的方式工作,但效率会降低
df.where(yourUdf($"col1", $"col2"))
答案 1 :(得分:0)
假设ctx是SQL上下文
ctx.udf.register("areEqual", (x: Double, y: Double, precision : Double) => abs(x-y)< prescision
然后
df.where(areEqual($"col1",$"col2",precision))