大叔经验分享(15)spark sql limit实现原理
2023-09-14 09:00:08 时间
之前讨论过hive中limit的实现,详见 https://www.cnblogs.com/barneywill/p/10109217.html
下面看spark sql中limit的实现,首先看执行计划:
spark-sql> explain select * from test1 limit 10;
== Physical Plan ==
CollectLimit 10
+- HiveTableScan [id#35], MetastoreRelation temp, test1
Time taken: 0.201 seconds, Fetched 1 row(s)
limit对应的CollectLimit,对应的实现类是
org.apache.spark.sql.execution.CollectLimitExec
case class CollectLimitExec(limit: Int, child: SparkPlan) extends UnaryExecNode { ... protected override def doExecute(): RDD[InternalRow] = { val locallyLimited = child.execute().mapPartitionsInternal(_.take(limit)) val shuffled = new ShuffledRowRDD( ShuffleExchange.prepareShuffleDependency( locallyLimited, child.output, SinglePartition, serializer)) shuffled.mapPartitionsInternal(_.take(limit)) }
可见实现非常简单,首先调用SparkPlan.execute得到结果的RDD,然后从每个partition中取前limit个row得到一个新的RDD,然后再将这个新的RDD变成一个分区,然后再取前limit个,这样就得到最终的结果。
相关文章
- 如何使用SQL Server配置管理器
- gltranslatef函数_sql translate函数怎么用
- Spark SQL报错:org.apache.spark.sql.catalyst.errors.package$TreeNodeException 排查记录
- SQL开发知识:SQL Server Parameter Sniffing及其改进方法
- SQL语句中的ON DUPLICATE KEY UPDATE使用
- 极速上手:使用SQL访问Oracle数据库(sql访问oracle数据库)
- tuningMySQL 日志分析指南:SQL 优化最佳实践(mysql日志sql)
- 文件使用 MySQL 导出 SQL 文件的步骤(mysql转储sql)
- 如何使用MySQL导出SQL语句?(mysql导出sql语句)
- MySQL学习:拼接SQL语句的技巧(mysql拼接sql)
- 技巧MySQL:学习高效的SQL技巧(mysql高效sql)
- 深入浅出Oracle高级SQL编程(oracle高级sql编程)
- pl/sql与Oracle PL/SQL集成的ASM技术。(asmoracle)
- 添加SQL Server:简单步骤指南(添加sqlserver)
- sql三米长的MySQL SQL:所见皆可攻破(3m mysql)
- sql与数据服务的桥梁:SQLServerSQLServer:连接SQL与数据服务的桥梁(sqlserver 介于)
- 符SQL Server中分隔符的使用实践(sqlserver中分隔)
- 数据管理用SQL Server实现上月数据管理(sqlserver 上月)
- SQL Server 2005快速安装指南: 只需几步搞定!(sqlserver2005安装图解)
- Oracle数据库跟踪SQL工具的使用与优点(oracle跟踪sql工具)
- SQL Server 监控:提高数据库运行效率(sqlserver监听)
- SQL 与 Redis数据库革命的新篇章(sql与redis)
- 利用Spark解锁Redis发挥新实力(spark与redis)
- 使用Oracle动态SQL脚本提升数据库性能(oracle中动态sql)
- Oracle中SQL紧密相连(oracle中sql联系)
- Oracle SQL题库丰富您的编程技能(oracle sql题库)
- Oracle SQL提交轻松实现数据库信息更新(oracle sql提交)
- Oracle SQL实现数据库修改的技巧(oracle sql修改)
- Sql学习第一天——SQL练习题(建表/sql语句)
- 只有两个字段用一个sql语句查询出某个学生的姓名、成绩以及在表中的排名