PySpark技术问题:提取列名下划线后的最后部分
修正方案
首先,你原代码的问题在于字符串分割的语法错误,以及对split方法的使用不当。下面是修正后的代码,同时优化了性能:
# 获取表结构,过滤掉非字段行(describe结果会包含额外元数据行) df = spark.sql("describe mytable") # 收集字段名,只保留真正的列名行(排除表头、统计信息等无效行) col_names_list = [row["col_name"] for row in df.collect() if row["col_name"] and not row["col_name"].startswith("#")] # 提取每个列名中下划线后的最后部分 col_names_short = ",".join([col.split("_")[-1] for col in col_names_list]) print(col_names_short)
关键修正点:
- 语法修复:原代码中
split的括号不匹配,len的用法完全错误。直接用split("_")[-1]就能获取下划线分割后的最后一段字符串,无需复杂计算长度。 - 过滤无效行:
describe mytable的结果会包含表的元数据行(比如# col_name这类表头行、表统计信息行),需要过滤掉这些非字段行,避免提取错误内容。 - 性能优化:原代码两次调用
df.collect()会重复触发Spark作业,改成一次收集后复用列表,减少不必要的开销。
示例效果:
如果列名是a_col_name1、user_id、order_total,处理后col_names_short会得到name1,id,total。
内容的提问来源于stack exchange,提问作者user3735871
相关产品推荐
相关产品推荐

