spark.udf.register("strlen", (s: String) => s.length) spark.sql("select s from test1 where s is not null and strlen(s) > 1") // no guarantee
因此,对于控制检查的推荐做法有二:
在 UDF 函数中处理空值问题
在 sql 中 使用 if 或者 CASE WHEN语句
1 2 3 4
spark.udf.register("strlen_nullsafe", (s: String) => if (s != null) s.length else -1) spark.sql("select s from test1 where s is not null and strlen_nullsafe(s) > 1") // ok
spark.sql("select s from test1 where if(s is not null, strlen(s), null) > 1") // ok