You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将DataFrame列名转为小写且不修改值?含Spark SQL与DataFrame方案

没问题,这就给你两种靠谱的实现方案,确保只修改列名的大小写,完全不改动DataFrame里的数据内容:

一、DataFrame API 方法(推荐,更贴合Spark的DataFrame操作习惯)

这种方法直接通过DataFrame的API批量重命名列,代码简洁高效:

# 假设你的目标DataFrame名为df
df_lower_cols = df.select([col(c).alias(c.lower()) for c in df.columns])

代码说明:

  • 遍历原DataFrame的所有列名df.columns
  • 对每个列col(c),用alias(c.lower())将其重命名为小写版本
  • 最后通过select()生成新的DataFrame,所有数据内容保持原样,仅列名转为小写

举个直观的例子:如果原df的列是["USER_ID", "USER_NAME", "REG_DATE"],执行后新df的列会变成["user_id", "user_name", "reg_date"],对应的数据完全不受影响。

二、原生Spark SQL 方法

如果更习惯用SQL语句操作,可以先把DataFrame注册成临时视图,再通过动态生成的SQL完成列名转换:

# 1. 将原DataFrame注册为临时视图
df.createOrReplaceTempView("temp_upper_table")

# 2. 动态生成SELECT子句(适配数百列的场景,避免手动编写)
select_clause = ", ".join([f"`{c}` AS {c.lower()}" for c in df.columns])

# 3. 执行Spark SQL得到结果
df_lower_cols = spark.sql(f"SELECT {select_clause} FROM temp_upper_table")

代码说明:

  • 第一步把DataFrame注册成临时视图后,就可以用SQL语法查询它
  • 动态生成SELECT子句是为了适配大量列的场景,用列表推导式把每个大写列名转换为原列名 AS 小写列名的格式;这里用反引号 包裹原列名,是为了防止列名包含特殊字符时触发SQL语法错误
  • 执行SQL后得到的新DataFrame,就是列名小写、数据内容完全不变的结果

额外注意:

如果原DataFrame中存在大小写不同但转小写后重复的列(比如"NAME"和"Name"),两种方法都会报错——因为Spark不允许DataFrame存在重复列名。这种情况需要先处理重复列,再进行大小写转换。

内容的提问来源于stack exchange,提问作者user1870400

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.19 04:16:04