在AWS Glue PySpark(Python3.6)中生成带递增$序号的列名字符串
解决方案
我来帮你搞定这个动态生成序号的问题!核心是用enumerate来追踪每个列的位置,同时先过滤掉不需要的列,再逐个拼接成你要的格式。直接上可用的代码:
# 1. 过滤掉不需要的列,保留目标列名 filtered_columns = [col for col in final_table_data_frame.schema.names if col != "run_datetime_partition"] # 2. 遍历列名,生成带动态序号的格式化字符串 formatted_parts = [f"${index + 1} \"{col.upper()}\"" for index, col in enumerate(filtered_columns)] # 3. 拼接成最终的字符串 var_list = ", ".join(formatted_parts)
代码解释
- 第一步:先通过列表推导式过滤掉
run_datetime_partition列,确保后续只处理需要保留的字段。 - 第二步:用
enumerate遍历过滤后的列名,它会返回每个元素的索引(从0开始)和列名本身。我们把索引加1得到你需要的$1、$2...序号,同时将列名转大写并用双引号包裹,拼接成指定格式的字符串。 - 第三步:用
,(逗号加空格)把所有格式化后的片段连接起来,得到最终符合要求的字符串。
效果验证
用你提供的列名列表测试,这段代码会生成完全符合需求的结果:
$1 "ID", $2 "ACCOUNT_ID", $3 "LAB_ORDER_ID", $4 "MATCH_STATUS", $5 "REPORT_DATE", $6 "MESSAGE", $7 "REPORTING_STATES", $8 "STATE_MESSAGES", $9 "OVERALL_CONSISTENCY", $10 "ALERTS", $11 "RUN_DATETIME"
而且不管你的表有多少列,序号都会自动动态适配,完全不用手动调整数字,非常灵活。
内容的提问来源于stack exchange,提问作者whit.the.engineer
相关产品推荐
相关产品推荐

