Использовать список строковых выражений в качестве условия соединения - PullRequest
0 голосов
/ 18 октября 2018

У меня есть список со строками в качестве его элементов.

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 голосов
/ 18 октября 2018

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
...