提示
Spark SQL 教程 正在筹划编写中,使用过程中有任何建议,提供意见、建议、纠错、催更加微信 gairuo123。
DISTRIBUTE BY 子句用于根据输入表达式重新划分数据。与 CLUSTER BY 子句不同,这不会对每个分区内的数据进行排序。
Spark SQL 的 DISTRIBUTE BY 子句结构为:
DISTRIBUTE BY { expression [ , ... ] }
expression 是 指定生成值的一个或多个值、运算符和 SQL 函数的组合。
以下是一些示例讲解:
CREATE TABLE person (name STRING, age INT);
INSERT INTO person VALUES
('Zen Hui', 25),
('Anil B', 18),
('Shone S', 16),
('Mike A', 25),
('John A', 18),
('Jack N', 16);
-- 将 shuffle 分区的数量减少到 2 以说明 “DISTRIBUTE BY” 的行为。
-- 使用较少的分区更容易看到聚类和排序行为。
SET spark.sql.shuffle.partitions = 2;
-- 选择没有排序的行。 请注意,如果没有任何排序指令,
-- 查询的结果是不确定的。 它被包含在这里只是为了将
-- 它与“DISTRIBUTE BY”的行为进行对比。
-- 下面的查询生成年龄列未聚集在一起的行。
SELECT age, name FROM person;
+---+-------+
|age| name|
+---+-------+
| 16|Shone S|
| 25|Zen Hui|
| 16| Jack N|
| 25| Mike A|
| 18| John A|
| 18| Anil B|
+---+-------+
-- 生成按年龄聚类的行。 年龄相同的人聚集在一起。
-- 与`CLUSTER BY` 子句不同,行不在分区内排序。
SELECT age, name FROM person DISTRIBUTE BY age;
+---+-------+
|age| name|
+---+-------+
| 25|Zen Hui|
| 25| Mike A|
| 18| John A|
| 18| Anil B|
| 16|Shone S|
| 16| Jack N|
+---+-------+
更新时间:2021-07-29 23:29:43 标签:sql spark distribute