Python Spark数据提取中循环批量获取多实例字段的方法
自动生成Spark取数字段名实现方法
首先纠正你原有代码的小问题:你之前写的field_names = ["cat_i1, var_i1"]是错误写法,列表里的单个字符串包含了两个字段名和逗号,会被识别为一个名称异常的字段,正确的字段列表需要把每个字段名单独作为一个字符串元素存放。
方案1:已知字段前缀时自动生成
如果你的字段都是固定前缀(比如cat、var)加_i1到_i4的后缀,直接用列表推导就能批量生成所有字段名,不需要手动逐个输入:
# 配置所有字段的前缀,后续有新前缀直接往这个列表里加就行 field_prefixes = ["cat", "var"] # 批量生成1-4号实例对应的全量字段名 field_names = [f"{prefix}_i{inst_id}" for prefix in field_prefixes for inst_id in range(1, 5)] # 初始化引擎拉取数据 engine = dxdata.connect() df = retrieve_fields(names=field_names, engine=engine)
生成的field_names输出如下,完全匹配你需要的字段格式:
['cat_i1', 'cat_i2', 'cat_i3', 'cat_i4', 'var_i1', 'var_i2', 'var_i3', 'var_i4']
方案2:自动识别库表中符合规则的字段
如果你不想手动维护前缀列表,可以先读取目标表的全量字段元数据,自动过滤出符合_i+1-4数字格式的字段:
import re engine = dxdata.connect() # 替换为你实际要读取的表名,获取表的全量字段列表 table = engine.get_table("你的目标表名") all_field_names = [field.name for field in table.schema] # 过滤出所有_i1/_i2/_i3/_i4结尾的实例字段 field_names = [name for name in all_field_names if re.match(r".*_i[1-4]$", name)] # 拉取数据 df = retrieve_fields(names=field_names, engine=engine)
补充说明
- 如果后续实例数量增加,比如从4个变成6个,只要把方案1里
range(1,5)改成range(1,7)即可,不需要逐个改字段名 - 方案2的正则规则可以根据你的实际字段格式调整,比如如果实例编号是两位数,把
[1-4]改成\d{2}就行
内容的提问来源于stack exchange,提问作者COOKIE1994
相关产品推荐
相关产品推荐

