如何在 when 子句中使用逻辑运算符来使用 length 和 rlike

How to use length and rlike using logical operator inside when clause

想要检查列中的值是否具有特定长度且仅包含数字。 问题是 .rlike.contains return 是 Column 类型。像

.when(length(col("abc")) == 20 & col("abc").rlike(...), myValue)

不会工作,因为 col("abc").rlike(...) 会 return Column 并且不像 length(col("abc")) == 20 returns Boolean (length() 然而也有 returns Column)。如何将两者结合起来?

在编译代码中做了一些搜索后,找到了这个

def when(condition : org.apache.spark.sql.Column, value : scala.Any) : org.apache.spark.sql.Column

因此 when 中的条件必须 return Column 类型。 length(col("abc")) == 20 评估为 Boolean

另外,发现这个函数具有以下签名

def equalTo(other : scala.Any) : org.apache.spark.sql.Column

所以,将整个表达式转换为这个

.when(length(col("abc")).equalTo(20) && col("abc").rlike(...), myValue)

请注意,逻辑运算符是 && 而不是 &

Edit/Update : @Histro 的评论是正确的。