如何使用Spark在WHERE IN中进行长查询?

时间:2019-04-19 20:33:01

标签: apache-spark pyspark

我有一个大型数据库,其中包含约500 gigs的列数据。我正在尝试使用DataBricks上的Spark访问数据,但是查询时间太长,无法让我获取我感兴趣的数据。对此我是陌生的,因此,如果问题不完全有意义,请原谅。 / p>

我现在唯一能做的方法是分解查询并使用其中的一部分然后重复进行。

SELECT *
FROM myDataTable
WHERE rollID in ('1', '2', '148', '123', '21432'....)

预期:立即获取所有数据,以便我可以在集群上进行一些分析。

1 个答案:

答案 0 :(得分:1)

您可以使用WHERE IN来代替JOIN。在这种情况下,您可能要使用LEFT SEMI JOIN

SELECT * FROM myDataTable t LEFT SEMI JOIN list l ON t.rollID = l.rollID

要执行此操作,您需要创建一个包含“ where in”值的表/数据框,并且可以将其视为使用联接执行过滤器。您可以通过指定要广播的filter / list数据帧来获得价值,即将整个表复制到所有执行程序,但是Spark足够聪明地为您做到这一点。