通过CLUSTER提高SparkSQL查询性能

时间:2020-06-05 18:26:43

标签: apache-spark-sql

我是SparkSQL的新手,主要从事编写SparkSQL查询的工作。我们经常需要在查询中使用JOIN大表,并且很快就会遇到与它们有关的性能问题(例如Joinsaggregates等)。

在网上搜索补救措施时,我最近遇到了COALESCE()REPARTITION()DISTRIBUTE BYCLUSTER BY等术语,以及它们可能被用于提高运行缓慢的SparkSQL性能查询

不幸的是,我找不到足够的例子,以便我清楚地理解它们并将其应用于我的查询中。我主要是在寻找解释其语法,提示和使用场景的示例。

任何人都可以在这里帮助我,并提供SparkSQL查询用法示例以及何时使用它们的示例吗?例如。

  • 语法
  • 提示语法
  • 提示
  • 场景

注意:我只能访问SparkSQL查询,但没有访问权限。{p>

我们非常感谢您的帮助。 谢谢

1 个答案:

答案 0 :(得分:0)

批发

coalesce(expr1,expr2,...)-返回第一个非null参数(如果存在)。否则,为空。

示例:

SELECT合并(NULL,1,NULL); 1个 由于:1.0.0

分发方式和副本

通过给定的表达式对DataFrame进行分区。分区数等于spark.sql.shuffle.partitions。请注意,在Spark中,当DataFrame被某个表达式分区时,该表达式相等的所有行都在同一分区上(但不一定相反)! 这就是实际情况。假设我们有一个包含两列的数据框:键和值。

SET spark.sql.shuffle.partitions = 2
SELECT * FROM df DISTRIBUTE BY键
等同于DataFrame API:

df.repartition($“ key”,2)

群集依据

这只是在同一组表达式上一起使用“分配”和“排序”的快捷方式。 在SQL中:

SET spark.sql.shuffle.partitions = 2
SELECT * FROM df CLUSTER BY键