我正在编写一个查询来从表A中获取记录,该查询满足了表B中记录的条件。例如:

表A是:

Name           Profession        City
John           Engineer          Palo Alto
Jack           Doctor            SF


表B是:

Profession     City      NewJobOffer
Engineer       SF           Yes


我有兴趣获得表c:

Name   Profession  City NewJobOffer
Jack   Engineer    SF      Yes


我可以通过两种方式使用where子句或join查询来做到这一点,哪一种更快,为什么在spark sql中呢?
在where子句中比较列添加选择那些记录或联接列本身,哪个更好?

最佳答案

最好在WHERE子句中提供过滤器。这两个表达式不相等。

在JOIN子句中提供过滤时,将检索两个数据源,然后在指定条件下将其合并。由于联接是首先通过改组(在执行程序之间重新分配)数据来完成的,因此您将要整理许多数据。

在WHERE子句中提供过滤器时,Spark可以识别它,并且您将过滤两个数据源,然后将其合并。这样,您将减少数据量。可能更重要的是,这种方式Spark也许还可以执行过滤器下推,在数据源级别过滤数据,这意味着更少的网络压力。

关于scala - Spark SQL中的where子句与join子句,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/38901027/

10-15 18:46