我的代码:
df = self.sql_context.sql(f"select max(id) as id from {table}")
return df.collect()[0][0]
我的表是按id分区的-它有100m条记录,但只有3个不同的id。
我希望这个查询能够处理1个任务,并且只扫描分区列(id)。
我不明白为什么只有3个分区的collect行有691个任务
我猜查询正在对表执行完全扫描,但我不明白为什么它不扫描元数据
我的代码:
df = self.sql_context.sql(f"select max(id) as id from {table}")
return df.collect()[0][0]
我的表是按id分区的-它有100m条记录,但只有3个不同的id。
我希望这个查询能够处理1个任务,并且只扫描分区列(id)。
我不明白为什么只有3个分区的collect行有691个任务
我猜查询正在对表执行完全扫描,但我不明白为什么它不扫描元数据
1条答案
按热度按时间xzlaal3s1#
你的
df
包含整个表的聚合结果,它只包含一行(只有一个字段是max(id)
),这就是为什么它只有一个分区。但是原来的
table
Dataframe可能有许多分区(或者只有一个分区,但是它的计算需要600个阶段,每个阶段触发一个任务,这并不常见)如果没有关于并行配置、输入源类型和转换的详细信息,就很难提供更多帮助!