通过数组中包含的ID进行Spark sql查询

时间:2016-11-02 18:11:01

标签: apache-spark

是否可以通过ID查询spark sql?

理想情况下,我正在寻找的是类似的东西

val ids = ["123", "345", "456", "972"]
df.filter(df("id") in ids)

另一个想法是如果我甚至可以传入一个包含单列的数据帧。

val ids = df.map(r => r.getString(1))
dataDf.filter(dataDF("id" in ids)

2 个答案:

答案 0 :(得分:3)

我不确定我是否正确理解了您的问题,但您可以使用isin根据值列表进行过滤。这是一个例子

val sqlContext = new org.apache.spark.sql.SQLContext(sc)
import sqlContext.implicits._

val df = sc.parallelize(Seq(1,2,3)).toDF("id")
df.show

+---+
| id|
+---+
|  1|
|  2|
|  3|
+---+

然后你可以使用你必须转换为vararg的List / Seq / Array进行过滤:

val ids = Array(1,2)
df.filter(df("id").isin(ids:_*)).show

+---+
| id|
+---+
|  1|
|  2|
+---+

或者你也可以直接写df.filter(df("id").isin(1,2))

答案 1 :(得分:0)

您可以通过...... df.filter($"id".isin( ids: _* ))之类的方式来实现。有关更多信息,请查看org.apache.spark.sql.Column

上定义的isin()文档