我是SparkSQL
的新手,主要从事编写SparkSQL
查询的工作。我们经常需要在查询中使用JOIN
大表,并且很快就会遇到与它们有关的性能问题(例如Joins
,aggregates
等)。
在网上搜索补救措施时,我最近遇到了COALESCE()
,REPARTITION()
,DISTRIBUTE BY
,CLUSTER BY
等术语,以及它们可能被用于提高运行缓慢的SparkSQL
性能查询。
不幸的是,我找不到足够的例子,以便我清楚地理解它们并将其应用于我的查询中。我主要是在寻找解释其语法,提示和使用场景的示例。
任何人都可以在这里帮助我,并提供SparkSQL
查询用法示例以及何时使用它们的示例吗?例如。
注意:我只能访问SparkSQL
查询,但没有访问权限。{p>
我们非常感谢您的帮助。 谢谢
答案 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键