spark中选择和过滤的顺序有什么偏好吗?

OmG*_*OmG 3 python apache-spark

我们有两种方法可以从 spark 数据框中选择和过滤数据df。第一的:

df = df.filter("filter definition").select('col1', 'col2', 'col3')
Run Code Online (Sandbox Code Playgroud)

第二:

df = df.select('col1', 'col2', 'col3').filter("filter definition")
Run Code Online (Sandbox Code Playgroud)

假设我们要调用之后的动作count。如果我们可以更改spark中filter和的位置,哪个性能更好select(我的意思是在我们使用的过滤器的定义中,我们使用选定的列而不是更多)?为什么?filterselect交换不同的动作有什么区别吗?

Anu*_*rma 5

Spark(1.6 及以上版本)使用催化剂优化器进行查询,因此性能较低的查询将转换为高效的查询。

在此处输入图片说明

只是为了确认您可以在数据帧上调用解释(真)来检查其优化计划,这对于两个查询都是相同的。

查询1计划: 在此处输入图片说明

查询2计划: 在此处输入图片说明

PS:新的变化是引入了基于成本的优化器。