使用 spark 版本 2 在 HIVE 中哪个更有效,最大或按 desc 限制 1 排序
Posted
技术标签:
【中文标题】使用 spark 版本 2 在 HIVE 中哪个更有效,最大或按 desc 限制 1 排序【英文标题】:Which is more efficient, max or order by desc limit 1 in HIVE using spark version 2 【发布时间】:2018-06-25 13:56:41 【问题描述】:由于 Hive 将数据保持在分布式状态,当我们没有考虑分区或分桶中的该列时,以下两个查询将更有效。
select max(stat_id) from stats_tbl ;
select stat_id from stats_tbl order by stat_id desc limit 1;
【问题讨论】:
【参考方案1】:肯定是select max(stat_id) from stats_tbl
,因为order by
需要将所有数据收集(读取“大量随机播放”)到单个reducer 中(这就是为什么你必须提供limit
子句)与它相比效率低下可以分布式计算的聚合函数。
【讨论】:
HIVE using spark很难说OP是什么意思,但只说Spark SQL,差异应该可以忽略不计order by stat_id desc limit 1
应该使用TakeOrdered...
所以数量洗牌的数据应该完全相同。【参考方案2】:
查询执行顺序为from
-> where
-> group by
-> having
->select
-> order by
-> limit
所以select max(stat_id) from stats_tbl ;
是一个简单的扫描操作,这意味着它只会逐行迭代一次,但查询select stat_id from stats_tbl order by stat_id desc limit 1;
将在扫描后执行排序,之后它将应用limit
。
而且我们也知道 oding 是昂贵的操作然后扫描所以查询 select max(stat_id) from stats_tbl;
比 select stat_id from stats_tbl order by stat_id desc limit 1;
更有效
【讨论】:
以上是关于使用 spark 版本 2 在 HIVE 中哪个更有效,最大或按 desc 限制 1 排序的主要内容,如果未能解决你的问题,请参考以下文章
Spark DataFrame vector 类型存储到Hive表