spark:同时查询多个条件

2cmtqfgy  于 2021-05-29  发布在  Spark
关注(0)|答案(1)|浏览(415)

所以呢 Dataframe.where 可用于为表达式给定的行筛选Dataframe,如下所示:

df.where(($"group_id" == 1234) || ($"group_id" == 4434))

或者举个更复杂的例子

df.where(($"group_id" == 1234 && $"country" === "PL") || ($"group_id" == 4434 $"country" === "FR"))

我感兴趣的是我是否能以某种方式提供这些条件作为一个列表,所以假设我有一个 group_id 的, List((1234, "PL"), (4434, "FR"), ....) 然后我想有效地过滤Dataframe。

flmtquvp

flmtquvp1#

您可以尝试以下方法:

val df = Seq((1,"a"),(2,"b"),(3,"c")).toDF()
df.show()

+---+---+
| _1| _2|
+---+---+
|  1|  a|
|  2|  b|
|  3|  c|
+---+---+

val list = List((1,"a"),(3,"c"))
val cols = List("_1","_2")

def mkCol(values: List[(Any,Any)], columns: List[String]) = list.map(s=>col(columns.apply(0)) === s._1 && col(columns.apply(1)) === s._2)
                                                                .reduce((a,b)=>a.or(b))

val col = mkCol(list,cols)
col.explain(true)

((('_1 = 1) && ('_2 = a)) || (('_1 = 3) && ('_2 = c)))

df.where(col).show()

+---+---+
| _1| _2|
+---+---+
|  1|  a|
|  3|  c|
+---+---+

相关问题