在SPARK SQL/Pyspark中如何将变量值作为列名用于DataFrame查询
实现方案
你只需要将存储列名的变量直接传入col()函数即可,不需要给变量加额外引号(加引号会将内容识别为固定列名字符串,而非读取变量值),完整实现代码如下:
from pyspark.sql.functions import col # 原有获取配置列名的逻辑保持不变 First_Name = Config.alias('a').select(a.col1).filter("Rownumber = '" + str(i) + "'" ).first()[0] Last_Name = Config.alias('a').select(a.col2).filter("Rownumber = '" + str(i) + "'" ).first()[0] Address = Config.alias('a').select(a.col3).filter("Rownumber = '" + str(i) + "'" ).first()[0] # 直接传入变量作为列名参数 DF = Emp.select(col(First_Name), col(Last_Name), col(Address))
如果需要简化写法,也可以把要查询的列名汇总为列表后批量传入:
# 汇总所有要查询的列名到列表 select_col_list = [First_Name, Last_Name, Address] # 解包列表传入select方法,无需手动调用col() DF = Emp.select(*select_col_list)
注意事项
- 请确保变量中存储的列名在
EmpDataFrame中真实存在,否则会触发列不存在的运行错误 - 如果需要对查询后的列重命名,可通过
col(变量名).alias("自定义列名")的方式实现
内容的提问来源于stack exchange,提问作者Susanth
相关产品推荐
相关产品推荐

