Spark SQL中的Where子句与join子句

时间:2016-08-11 15:51:59

标签: scala apache-spark apache-spark-sql rdd spark-dataframe

我正在编写一个查询来从表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子句或连接查询以两种方式执行此操作,哪一个更快以及为什么在spark sql中? Where子句比较列添加选择那些记录或连接列本身,哪个更好?

1 个答案:

答案 0 :(得分:0)

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

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

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