首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何使用循环创建联接条件?

如何使用循环创建联接条件?
EN

Stack Overflow用户
提问于 2022-07-11 11:32:54
回答 1查看 123关注 0票数 0

我正在创建一个通用条件,用于连接具有与下面代码相同的键和结构的2个数据文件。我想把它作为比较两个数据格式的函数。第一个想法是,我把它作为字符串条件,因为它很容易将条件与循环连接起来。最后,似乎联接条件无法接受字符串条件。有人能帮我指点一下吗?

代码语言:javascript
运行
复制
import pyspark.sql.functions as F

key = "col1 col2 col3"

def CompareData(df1,df2,key) :
  key_list = key.split(" ")
  key_con=""

  for col in key_list:
    condi = "(F.col(\"" + col +"\") == F.col(\""+"x_"+col+"\"))"  # trying to generate generic condition
    key_con=key_con + "&" + condi

  key_condition=key_con.replace('&','',1)

  df1_tmp = df1.select([F.col(c).alias("x_"+c) for c in df1.columns])

  df_compare = df2.join(df1_tmp, key_condition , "left")  # The problem was here. key_condition has error. If I copy the condition string below and place into join condition, it works fine.

  # key_condition = (F.col("col1") == F.col("x_col1")) & (F.col("col2") == F.col("x_col2")) & (F.col("col3") == F.col("x_col3")) 
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-07-11 11:42:50

试试这个:

代码语言:javascript
运行
复制
  key_con = F.lit(True)
  for col in key_list:
    condi = (F.col(col) == F.col(f"x_{col}"))
    key_con = key_con & condi

在您的尝试中,您的条件是字符串类型。但是join的参数on只在字符串是一个普通列名的情况下才接受它。您正在尝试创建一个列表达式并将它传递给on参数。列表达式与字符串不是一回事,所以您需要一种稍微不同的方法来生成一个复合列表达式。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72937901

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档