如何在 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 的评论是正确的。
想要检查列中的值是否具有特定长度且仅包含数字。
问题是 .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 的评论是正确的。