在基于Spark Dataframe的API中过滤多个列

时间:2017-10-12 22:30:46

标签: python apache-spark pyspark apache-spark-sql spark-dataframe

我有一个类似的数据框:

+--------+-------+--------------------+-------------------+
|     id1|    id2|                body|         created_at|
+--------+-------+--------------------+-------------------+
|1       |      4|....................|2017-10-01 00:00:05|
|2       |      3|....................|2017-10-01 00:00:05|
|3       |      2|....................|2017-10-01 00:00:05|
|4       |      1|....................|2017-10-01 00:00:05|
+--------+-------+--------------------+-------------------+

我想使用id1id2来过滤表格。例如,获取id1=1, id2=4id1=2, id2=3的行。

目前,我正在使用循环生成df.filter()的巨型查询字符串,即((id1 = 1) and (id2 = 4)) or ((id1 = 2) and (id2 = 3))。只是想知道是否有更合适的方法来实现这一目标?

1 个答案:

答案 0 :(得分:1)

您可以生成辅助DF(表):

<强> TMP:

+--------+-------+
|     id1|    id2|
+--------+-------+
|1       |      4|
|2       |      3|
+--------+-------+

然后加入他们:

SELECT a.*
FROM tab a
JOIN tmp b
  ON (a.id1 = b.id1 and a.id2 = b.id2)

其中tab是您的原始DF,注册为表