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

时间:2018-10-18 14:48:41

标签: apache-spark pyspark apache-spark-sql pyspark-sql

我有一个以字符串为元素的列表。

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")

1 个答案:

答案 0 :(得分: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