Spark中如何将驼峰式列名转换为空格分隔的列名
将Spark DataFrame驼峰式列名转为带空格的列名
核心思路
通过正则表达式匹配驼峰式命名里的大小写分界点,在分界处插入空格,批量重命名DataFrame的所有列。
Python 实现示例
import re from pyspark.sql import SparkSession # 初始化Spark会话 spark = SparkSession.builder.appName("CamelCaseConverter").getOrCreate() # 构建示例DataFrame sample_data = [(1, "Wsss"), (2, "Xles")] original_df = spark.createDataFrame(sample_data, ["InstanceId", "InstanceType"]) # 定义驼峰转空格的转换函数 def camel_to_space(column_name): # 仅在小写字母与大写字母之间插入空格,适配连续大写的场景(如HTTPRequest → HTTP Request) return re.sub(r'(?<=[a-z])(?=[A-Z])', ' ', column_name) # 批量重命名列 renamed_df = original_df.toDF(*[camel_to_space(col) for col in original_df.columns]) # 查看结果 renamed_df.show()
执行后输出的DataFrame列名即为Instance Id和Instance Type,数据内容保持不变。
Scala 实现示例
import org.apache.spark.sql.SparkSession object CamelCaseColumnRenamer { def main(args: Array[String]): Unit = { val spark = SparkSession.builder.appName("CamelCaseConverter").getOrCreate() import spark.implicits._ // 构建示例DataFrame val sampleData = Seq((1, "Wsss"), (2, "Xles")) val originalDF = sampleData.toDF("InstanceId", "InstanceType") // 定义转换函数 def camelToSpace(columnName: String): String = { columnName.replaceAll("(?<=[a-z])(?=[A-Z])", " ") } // 批量重命名列 val renamedDF = originalDF.toDF(originalDF.columns.map(camelToSpace): _*) // 查看结果 renamedDF.show() } }
正则说明
使用的正则表达式(?<=[a-z])(?=[A-Z])是零宽断言:
(?<=[a-z]):反向预查,确保当前位置前是小写字母(?=[A-Z]):正向预查,确保当前位置后是大写字母
这种方式只会在小写字母紧跟大写字母的位置插入空格,不会破坏连续大写的单词(如HTTPRequest会转为HTTP Request而非H T T P Request)。
内容的提问来源于stack exchange,提问作者Antonio Fernández
相关产品推荐
相关产品推荐

