我正在编写一个查询,从表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子句来比较列,添加选择这些记录还是在列本身上连接,哪个更好?
最好在WHERE子句中提供过滤器。这两个表达式不相等。
当您在JOIN子句中提供过滤时,您将获得两个数据源,然后在指定条件下进行连接。由于join首先是通过打乱(在执行器之间重新分配)数据来完成的,因此您将打乱大量数据。
当你在WHERE子句中提供filter时,Spark可以识别它,你将有两个数据源被过滤然后连接。通过这种方式,您将洗牌更少的数据量。更重要的是,通过这种方式,Spark还可以执行filter-pushdown,在数据源级别过滤数据,这意味着更少的网络压力。