使用 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 排序的主要内容,如果未能解决你的问题,请参考以下文章

hive spark版本对应关系

Hive on Spark

Spark DataFrame vector 类型存储到Hive表

无法使用 Apache spark 2.1.0 连接到 hive 数据库

Spark&Hive结合起来

Spark DataFrame vector 类型存储到Hive表