Spark SQL - IN 子句

Posted

技术标签:

【中文标题】Spark SQL - IN 子句【英文标题】:Spark SQL - IN clause 【发布时间】:2016-10-24 12:28:58 【问题描述】:

我想为 DataFrame 中具有多个值的列添加 where 条件。

例如,它适用于单个值。

df.where($"type".==="type1" && $"status"==="completed").

如何为同一列添加多个值,如下所示。

df.where($"type" IN ("type1","type2") && $"status" IN ("completed","inprogress")

【问题讨论】:

【参考方案1】:

你要找的方法是isin:

import sqlContext.implicits._
df.where($"type".isin("type1","type2") and $"status".isin("completed","inprogress"))

通常,你想做这样的事情

val types = Seq("type1","type2")
val statuses = Seq("completed","inprogress")

df.where($"type".isin(types:_*) and $"status".isin(statuses:_*))

【讨论】:

如何动态构建多个值?我尝试 StringBuilder 构建它不起作用,可能是它作为单个字符串出现,如果我给出由 , 分隔的值它的工作。 您使用Seq而不是ArrayList的原因是什么?谢谢! @akmal SeqList 更通用。 Array 不是 scala 集合 API 的一部分,所以除非我有充分的理由,否则我不会使用它。 什么是 IN 是有一个数据框列来检查值?如何处理?

以上是关于Spark SQL - IN 子句的主要内容,如果未能解决你的问题,请参考以下文章

Databricks getArgument 值不能在 Spark SQL IN 子句中使用

在 SPARK SQL 中参数化 Where 子句

Spark SQL 中的 where 子句与 join 子句

使用 Spark 执行“WHERE IN”子句,如何仅重新训练第一个数据集的列?

哪个更快? Spark SQL with Where 子句或在 Spark SQL 之后在 Dataframe 中使用过滤器

Spark SQL 中 Group By 子句的底层实现