spark sql中踩到的一个坑,自定义Udf会执行多次,即使在已经cache table的情况下: https://issues.apache.org/jira/browse/SPARK-15282
以前也没发现这个问题,因为如果一个UDF是无状态的话,其实执行多次并不会导致结果的最终一致性被打破,说来也巧啊,最近写了一个UDF里面封装了redis的hsetnx操作
val hsetnx_expire = (key: String, field: String, value: String, expire: Int) => {
if (field != null && field.trim.length > 0) {
CommonRedisPool.withJedis(jedis => {
try {
val ret = jedis.hsetnx(key, field, StringUtils.defaultString(value, ""))
if (expire > 0) {
jedis.expire(key, expire)
}
if (ret == 1) true else false
} catch {
case e: Exception =>
throw new RuntimeException(s"===================${e.getMessage},key:$key,field:$field,va