使用字符串表达式列表作为连接条件

问题描述 投票:1回答:1

我有一个列表,其中包含字符串作为其元素。

list_elem = ['df1.x1 == df2.p1', 'df1.x2 == df2.p2']

我想将该列表更改为类似的内容。

list_new = [ df1.x1 == df2.p1, df1.x2 == df2.p2 ]

我需要这个,因为我必须运行一个以列表形式给出的参数输入的连接。

df = df1.join(df2,list_new,"inner")
apache-spark pyspark apache-spark-sql pyspark-sql
1个回答
0
投票

IIUC,您可以使用pyspark.sql.functions.expr达到预期的效果:

from pyspark.sql.functions import expr

df = df1.alias('df1').join(
    df2.alias('df2'),
    on=expr(" AND ".join(list_elem )),
    how="inner"
)

" AND ".join(list_elem )将加入列表中的元素,其中包含单词"AND"

print(" AND ".join(list_elem ))
#df1.x1 == df2.p1 AND df1.x2 == df2.p2
© www.soinside.com 2019 - 2024. All rights reserved.