提示
Spark SQL 教程 正在筹划编写中,使用过程中有任何建议,提供意见、建议、纠错、催更加微信 gairuo123。
CLUSTER BY 子句用于首先根据输入表达式重新划分数据,然后对每个分区中的数据进行排序。这在语义上相当于执行 DISTRIBUTE BY 后跟 SORT BY。此子句只确保结果行在每个分区内排序,不保证输出的总顺序。
语法如下:
CLUSTER BY { expression [ , ... ] }
参数:
使用示例如下:
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 分区的数量 Reduce 到 2,以说明 “CLUSTER BY” 的行为
-- 在分区数量较少的情况下,更容易看到集群和排序行为
SET spark.sql.shuffle.partitions = 2;
-- 选择没有排序的行。请注意,如果没有任何 sort 指令,
-- 查询结果是不确定的。这里包含它是为了显示不使用“CLUSTER 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|
+---+-------+
-- 生成按年龄聚集的行。同龄的人聚集在一起。
-- 在下面的查询中,18岁和25岁的人在第一个分区中,
-- 16岁的人在第二个分区中。
-- 这些行根据每个分区内的年龄进行排序。
SELECT age, name FROM person CLUSTER BY age;
+---+-------+
|age| name|
+---+-------+
| 18| John A|
| 18| Anil B|
| 25|Zen Hui|
| 25| Mike A|
| 16|Shone S|
| 16| Jack N|
+---+-------+
更新时间:2021-07-29 23:05:13 标签:spark sql clusterby