Apache spark 用于列条件的Spark SQL不区分大小写筛选器

Apache spark 用于列条件的Spark SQL不区分大小写筛选器,apache-spark,apache-spark-sql,Apache Spark,Apache Spark Sql,如何使用Spark SQL筛选器作为不区分大小写的筛选器 例如: dataFrame.filter(dataFrame.col(“供应商”).equalTo(“fortinet”)); 只需返回'vendor'列等于'fortinet'的行,但我希望'vendor'列等于'fortinet'或'fortinet'或…您可以使用不区分大小写的正则表达式: val df=sc.parallelize(Seq( (1L,“富通网”),(2L,“富通网”),(3L,“富通网”) )).toDF(“k”

如何使用Spark SQL筛选器作为不区分大小写的筛选器

例如:

dataFrame.filter(dataFrame.col(“供应商”).equalTo(“fortinet”));

只需返回
'vendor'
列等于
'fortinet'
的行,但我希望
'vendor'
列等于
'fortinet'
'fortinet'
或…

您可以使用不区分大小写的正则表达式:

val df=sc.parallelize(Seq(
(1L,“富通网”),(2L,“富通网”),(3L,“富通网”)
)).toDF(“k”、“v”)
df.where($“v”.rlike((?i)^fortinet$)。显示
// +---+--------+
//| k | v|
// +---+--------+
//| 1 | Fortinet|
//| 2 | foRtinet|
// +---+--------+
或与
下部
/
上部
简单相等:

import org.apache.spark.sql.functions.{lower,upper}
df.式中(较低($“v”)=“fortinet”)
// +---+--------+
//| k | v|
// +---+--------+
//| 1 | Fortinet|
//| 2 | foRtinet|
// +---+--------+
df.式中(上($“v”)=“FORTINET”)
// +---+--------+
//| k | v|
// +---+--------+
//| 1 | Fortinet|
//| 2 | foRtinet|
// +---+--------+

对于简单的过滤器,我更喜欢
rlike
,虽然性能应该类似,但是对于
join
条件,相等是一个更好的选择。有关详细信息,请参阅。

尝试使用下/上字符串函数:

dataFrame.filter(lower(dataFrame.col("vendor")).equalTo("fortinet"))


@我对所有表都有这个问题。我的意思是我需要我的应用程序提供不区分大小写的结果。是否有任何解决方案可以让我获得类似SQLServer的结果(每次都忽略大小写)?对于Pyspark,可以通过Pyspark.sql中的
导入lower
。对于像我一样被
(?i)
弄糊涂的未来观众,这是Scala regex flags()的语法。
dataFrame.filter(upper(dataFrame.col("vendor")).equalTo("FORTINET"))