Spark SQL性能优化

时间:2024-04-09 15:20:07

一.在内存中缓存数据

Spark SQL可以通过调用spark.catalog.cacheTable(“tableName”)或使用dataFrame.cache()内存列式格式缓存表。然后,Spark SQL将仅扫描所需的列,并将自动调整压缩以最大程度地减少内存使用和GC压力。可以调用spark.catalog.uncacheTable(“tableName”)从内存中删除表或dataFrame.unCache()取消缓存。

可以在SparkSession上使用setConf方法或使用SQL运行SET key=value 命令来完成内存中缓存的配置。
Spark SQL性能优化
中文翻译
Spark SQL性能优化
以下选项也可以用于调整查询执行的性能。随着自动执行更多优化,这些选项可能会在将来的版本中被弃用。
Spark SQL性能优化
Spark SQL性能优化
Spark SQL性能优化

二.加入针对SQL查询的策略提示

连接策略提示,即BROADCAST,MERGE,SHUFFLE_HASH和SHUFFLE_REPLICATE_NL,指导星火与其他关系结合时,他们使用暗示策略上的每个特定关系。例如,当BROADCAST在表’t1’上使用提示时,Spark将优先考虑以’t1’作为构建侧的广播联接(广播哈希联接或广播嵌套循环联接,取决于是否有任何等联接键)。即使统计信息建议的表’t1’的大小在配置之上spark.sql.autoBroadcastJoinThreshold。

当在连接的两侧指定了不同的连接策略提示时,Spark会优先于BROADCAST提示而不是MERGE提示优先 SHUFFLE_HASH于SHUFFLE_REPLICATE_NL 提示。当使用BROADCAST提示或SHUFFLE_HASH提示指定双方时,Spark将根据联接类型和关系的大小选择构建方。

请注意,由于特定策略可能不支持所有联接类型,因此不能保证Spark将选择提示中指定的联接策略。