PySpark动态加入条件

时间:2018-12-07 12:43:07

标签: join dynamic pyspark conditional-statements

我有PK列的列表。我正在存储主键,因为每个表的主键数可能会更改。我想根据pk_list中的列来连接两个数据框。

pk_list=['col1',col2', .... 'coln']

现在我的代码如下:

full_load_tbl_nc = full_load_tbl.join(delta_load_tbl, (col(f) == col(s) for (f,s) in zip(pk_list,pk_list) ) , "leftanti")

运行代码时出现此错误:

  

广播列表pyspark.sql.column也失败col(pk_list)   从pyspark.sql.functions导入导入   在连接中的文件“ /mnt/yarn/usercache/root/appcache/application_1544185829274_0001/container_1544185829274_0001_01_000001/pyspark.zip/pyspark/sql/dataframe.py”中加入   AssertionError:on应该是Column或Column的列表

1 个答案:

答案 0 :(得分:0)

您需要将连接密钥作为列表传递:尝试以下代码

DF1_Columns = ['col1',col2']
DF2_Columns = ['Col11', 'Col22']
result = DF1.join(DF2, ([col(f) == col(s) for (f,s) in zip(DF1_Columns ,DF2_Columns )]) , "type")

或者,如果两个数据框中的Key列的名称相似,则可以编写如下相同的join语句:

result= DF1.join(DF2, ([col(column) == col(column) for column in DF1_Columns ]) , "type")