如何使用Spark纯SQL(无Python)创建自增ID列
Spark SQL 生成ID编号的实现方法
Spark SQL中可以直接使用内置函数生成ID,以下结合你需要的字符串操作场景,给出两种常见实现方式:
1. 全局唯一递增ID(非连续)
直接调用monotonically_increasing_id()函数,和Python API中的功能完全一致。它会生成全局唯一的64位整数ID,性能优异适合大数据量场景,但ID不一定连续。
示例:从旧表创建新表,同时处理字符串列并添加ID列
CREATE TABLE new_table AS SELECT monotonically_increasing_id() AS id, -- 替换为你的字符串操作逻辑,比如转大写、截取子串等 UPPER(old_str_col) AS processed_str, other_col1, other_col2 FROM old_table;
2. 连续自增ID(全局/分区内)
如果需要从1开始的连续ID,可以使用row_number()窗口函数,支持全局连续或按指定字段分区后内部递增。
全局连续ID
CREATE TABLE new_table AS SELECT row_number() OVER (ORDER BY sort_column) AS id, -- 字符串操作示例:拼接前缀 CONCAT('tag_', old_str_col) AS processed_str FROM old_table;
分区内自增ID
比如按category字段分区,每个分区内ID从1重新开始:
CREATE TABLE new_table AS SELECT row_number() OVER (PARTITION BY category ORDER BY create_time) AS id, -- 字符串操作示例:截取前10位字符 SUBSTRING(old_str_col, 1, 10) AS processed_str FROM old_table;
注意:
row_number()需要指定排序字段,大数据量下会触发shuffle操作,性能比monotonically_increasing_id()稍差,根据实际需求选择即可。
内容的提问来源于stack exchange,提问作者Feng Yu
相关产品推荐
相关产品推荐

