我正在编写一个查询来从表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子句比较列添加选择那些记录或连接列本身,哪个更好?
答案 0 :(得分:0)
最好在WHERE子句中提供过滤器。这两个表达式不相等。
在JOIN子句中提供过滤时,将检索两个数据源,然后在指定条件下将其合并。由于联接是首先通过改组(在执行程序之间重新分配)数据完成的,因此您将改组许多数据。
在WHERE子句中提供过滤器时,Spark可以识别它,并且您将过滤两个数据源,然后将其合并。这样,您将减少数据量。可能更重要的是,通过这种方式,Spark也许还可以执行过滤器下推功能,在数据源级别过滤数据,这意味着更少的网络压力。