apache-spark - 拆分 SQL 查询以提高 Spark 效率
问题描述
我有一个非常大的 HIVE SQL 查询,要迁移到 spark 上。
通过划分查询是否可以节省性能?
结合:
Dataset<Row> sqlDF = spark.sql("select c.name from order o join customer c on o.orderID=c.orderID where o.productPrice > 100");
相比:
Dataset<Row> order = spark.sql("select o.orderID from order where where o.productPrice > 100");
Dataset<Row> customer= spark.sql("select c.orderID, c.name from customer);
Dataset<Row> joinedTable = order.join(customer, customer("orderID"));
使用 Dataframes 会降低可读性,但我不确定 spark 如何优化请求。
解决方案
鉴于未完成的查询也表现出性能不足,那么答案是肯定的。
我见过 Spark SQL 有 70 个表连接,但由于内存错误而失败。通过缓存将其分解为更小的集合允许它随后执行。
Catalyst 正在变得越来越好,但它落后于传统 RDBMS 的最佳优化器。它或其继任者将迎头赶上。
同样的问题也适用于 Oracle。
我认为您的示例不会显示任何优势,但有时需要拆分更复杂的查询,但这是根据具体情况而定的。
推荐阅读
- typescript - typeof variable === "function" 为真,但由于意外的类型合并,变量仍然缺少调用签名
- go - 从不同目录的多个文件创建插件
- python - 调试 Python:二叉搜索树(对象错误)
- javascript - 反应:1. 单选按钮没有切换/选择 2. 过滤 JSON 数据后状态为空
- ruby-on-rails - IMG KIT 不显示 Font Awesome 图标
- android - kivy python程序在android上启动时立即关闭
- oracle - 我的函数声明中有错误 PLS-00103,我找不到问题
- laravel - 如何制作不使用主键的外键
- file - Lua 获取文本文件行的值
- javascript - 用未来日期格式化日期