apache-spark-sql - 通过 CLUSTER 提高 SparkSQL 查询性能
问题描述
我是新手,SparkSQL
主要从事编写SparkSQL
查询的工作。我们经常需要JOIN
在查询中使用大表,并且很快就会遇到与它们相关的性能问题(例如Joins
,aggregates
等)。
在网上搜索补救措施时,我最近遇到了术语 - COALESCE()
、REPARTITION()
、等DISTRIBUTE BY
,CLUSTER BY
以及它们可能用于提高运行缓慢的SparkSQL
查询的性能这一事实。
不幸的是,我找不到足够的例子来让我清楚地理解它们并开始将它们应用到我的查询中。我主要是在寻找解释它们的语法、提示和使用场景的例子。
任何人都可以在这里帮助我并提供SparkSQL
其用法和何时使用它们的查询示例吗?例如
- 句法
- 提示语法
- 提示
- 场景
注意:我只能访问编写SparkSQL
查询,但无权访问PySpark-SQL
.
任何帮助深表感谢。谢谢
解决方案
合并
coalesce(expr1, expr2, ...) - 如果存在,则返回第一个非空参数。否则为空。
例子:
选择合并(NULL,1,NULL);1 自:1.0.0
分发者和修复
通过给定的表达式重新分区 DataFrame。分区数等于 spark.sql.shuffle.partitions。请注意,在 Spark 中,当一个 DataFrame 被某个表达式分区时,该表达式相等的所有行都在同一个分区上(但不一定反之亦然)!这就是它在实践中的样子。假设我们有一个包含两列的 DataFrame:键和值。
SET spark.sql.shuffle.partitions = 2
SELECT * FROM df DISTRIBUTE BY key
等效于 DataFrame API:df.repartition($"key", 2)
聚类依据
这只是在同一组表达式上一起使用分发和排序的快捷方式。在 SQL 中:
SET spark.sql.shuffle.partitions = 2
SELECT * FROM df CLUSTER BY key
推荐阅读
- swift - 在 UIViewRepresentable SwiftUI 中设置自定义 UIView 框架
- python-3.x - 如何键入提示返回已在函数中创建的 NamedTuple 的函数
- java - 为什么使用 cookie 而不是登录每个事务
- php - WooCommerce 在订单通知中显示高级自定义字段 (ACF)
- python-2.7 - 将 Python 2.7 更改为 Python 3.7 获取 TypeError:需要类似字节的对象,而不是“str”
- php - PHP 如果变量 = a 而不是 = b
- python - 具有非 json 有效负载的 boto3 lambda 调用函数
- sql-server - 查询结果的每条记录/行一列
- list - 通过在原始列表中移动将唯一列表重新排序到另一个列表
- python - “ImportError:没有已知父包的尝试相对导入”,相对路径确实存在