在pyspark中读取镶木地板文件时where子句中的动态列

时间:2019-05-15 14:41:47

标签: apache-spark dataframe dynamic pyspark

我有实木复合地板文件,并且希望基于动态列读取它们,因此举一个例子,我有2个数据帧,并希望基于df2从df1中选择数据。

所以我正在使用下面的代码,但想使它在连接列方面具有动态性,今天我有2列,明天我可以有4列。

a = dict[keys]
col1 = a[0]
col2 = a[1]
v = df1.join(df2,[df1[col1] == df2[col1],
df1.[col2] == df2.[col2],
how='inner')

所以我如何使此列动态化,以便不必对连接条件进行硬编码,并将添加从连接条件中删除的列。

1 个答案:

答案 0 :(得分:0)

我只是先根据您的字典生成联接条件对象,然后在联接中使用它。

from functools import reduce

join_condition = reduce(
    lambda a, b: a && b,
    [ df1[col] == df2[col] 
     for col 
     in dict[keys]
    ]
)

v = df1.join(
    df2,
    join_condition,
)