我有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的列表
答案 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")