gpt4 book ai didi

scala - 我可以在 where 或过滤器中有条件吗?

转载 作者:行者123 更新时间:2023-12-05 00:10:36 24 4
gpt4 key购买 nike

我有一个包含很多列的dataframe,为了解释这种情况,假设有一个列,其中包含从 a 到 z 的字母。我还有一个列表,其中包括一些特定字母

val testerList = List("a","k")

必须过滤数据框,以仅包含列表中具有指定字母的条目。这非常简单:

val resultDF = df.where($"column".isin(testerList:_*)))

所以问题是,列表作为参数给这个函数,它可以是一个空列表,这种情况可以这样解决(resultDF在这里定义为一个空数据框):

if (!(testerList.isEmpty)) {
resultDF = df.where(some other stuff has to be filtered away)
.where($"column".isin(testerList:_*)))
} else {
resultDF = df.where(some other stuff has to be filtered away)
}

有没有办法以更简单的方式实现这一点,像这样:

val resultDF = df.where(some other stuff has to be filtered away)
.where((!(testerList.isEmpty)) && $"column".isin(testerList:_*)))

虽然这个会抛出一个错误:

 error: type mismatch;
found : org.apache.spark.sql.Column
required: Boolean
.where( (!(testerList.isEmpty)) && (($"agent_account_homepage").isin(testerList:_*)))
^

非常感谢您提供解决方案的任何想法!! :)

最佳答案

这个怎么样?

val filtered1 = df.where(some other stuff has to be filtered away)
val resultDF = if (testerList.isEmpty)
filtered1
else
filtered1.where($"column".isin(testerList:_*))

或者,如果您不希望 filtered1 在下面可用并且可能无意使用,则可以在初始化 resultDF 的 block 内声明它:

val resultDF = {
val filtered1 = df.where(some other stuff has to be filtered away)
if (testerList.isEmpty) filtered1 else filtered1.where($"column".isin(testerList:_*))
}

或者如果您更改订单

val resultDF = (if (testerList.isEmpty) 
df
else
df.where($"column".isin(testerList:_*))
).where(some other stuff has to be filtered away)

关于scala - 我可以在 where 或过滤器中有条件吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56885093/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com