PySpark如何筛选df2中列名属于df1.No_of_Question列值的列
正确实现代码
你需要先将df1里No_of_Question的取值拉取到Driver端转为Python本地列表,再用列表筛选df2的列:
# 提取要保留的列名,转为本地列表,加distinct是避免重复列名 keep_cols = [row["No_of_Question"] for row in df1.select("No_of_Question").distinct().collect()] # 过滤df2不存在的列,避免运行报错 valid_cols = [c for c in keep_cols if c in df2.columns] # 选择目标列得到结果 df2 = df2.select(*valid_cols)
之前写法失效的原因
F.collect_list()是Spark转换函数,返回的是Spark Column表达式对象,不是本地可迭代的列表,不能直接解包传入select,也无法跨DataFrame引用字段df1.No_of_Question是Spark DataFrame的列对象,不是存储具体值的Python集合,直接用in做包含判断不会得到你预期的匹配结果
内容的提问来源于stack exchange,提问作者Turvy
相关产品推荐
相关产品推荐

