我是SparkSQL新手,我主要负责编写SparkSQL查询。我们经常需要在查询中使用JOIN大表,并且不需要很长时间就会遇到与它们相关的性能问题(例如。Joins、aggregates等)。
在网上搜索补救方法时,我最近遇到了一些术语-- COALESCE()、REPARTITION()、DISTRIBUTE BY、CLUSTER BY等,而且它们可能用于提高慢速运行的SparkSQL 查询的性能。
不幸的是,我找不到足够的例子,让我清楚地理解它们,并开始将它们应用到我的查询中。我主要是寻找一些例子来解释它们的语法、提示和使用场景。
有谁能在这里帮助我,并提供SparkSQL查询它们的用法和何时使用它们的例子?例如。
注意:我只有编写SparkSQL查询的权限,但没有访问PySpark-SQL的权限。
任何帮助都是非常感谢的。谢谢
发布于 2020-06-06 15:13:24
coalesce
聚结(expr1,expr2,.)-如果存在,则返回第一个非空参数。否则,无效。
示例:
选择聚结(NULL,1,NULL);1自: 1.0.0
通过分发和重新分区
根据给定的表达式重新划分DataFrame。分区数等于spark.sql.shuffle.partitions。请注意,在Spark中,当某个表达式对DataFrame进行分区时,该表达式相等的所有行都位于同一个分区上(但未必相反)!这就是它在实践中的样子。假设我们有一个包含两列的DataFrame : key和value。
集spark.sql.shuffle.partitions =2
从df按键分发选择*
等效于DataFrame API:
df.repartition($"key",2)
集群的实现
这只是在同一组表达式上使用distribute和sort的快捷方式。在SQL中:
集spark.sql.shuffle.partitions =2
按键从df集群中选择*
https://stackoverflow.com/questions/62221952
复制相似问题