首页 > 解决方案 > 拆分 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 如何优化请求。

标签: apache-sparkapache-spark-sql

解决方案


鉴于未完成的查询也表现出性能不足,那么答案是肯定的。

我见过 Spark SQL 有 70 个表连接,但由于内存错误而失败。通过缓存将其分解为更小的集合允许它随后执行。

Catalyst 正在变得越来越好,但它落后于传统 RDBMS 的最佳优化器。它或其继任者将迎头赶上。

同样的问题也适用于 Oracle。

我认为您的示例不会显示任何优势,但有时需要拆分更复杂的查询,但这是根据具体情况而定的。


推荐阅读