Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/ms-access/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Spark join-匹配长列表中的任意列_Join_Pyspark_Pyspark Sql - Fatal编程技术网

Spark join-匹配长列表中的任意列

Spark join-匹配长列表中的任意列,join,pyspark,pyspark-sql,Join,Pyspark,Pyspark Sql,我需要连接两个表,条件是表中的一列匹配一个很长列表中的任何列,即: columns = ['name001', 'name002', ..., 'name298'] df = df1.join(df2, (df1['name']==df2['name1']) | (df1['name']==df2['name2']) | ... | df1['name']==df2['name298']) 我如何在Pyspark中实现这个连接,而不编写长条件?非常感谢 您可以在列列表上使用循环来构建连接表达

我需要连接两个表,条件是表中的一列匹配一个很长列表中的任何列,即:

columns = ['name001', 'name002', ..., 'name298']

df = df1.join(df2, (df1['name']==df2['name1']) | (df1['name']==df2['name2']) | ... | df1['name']==df2['name298'])

我如何在Pyspark中实现这个连接,而不编写长条件?非常感谢

您可以在
列表上使用循环来构建
连接
表达式:

join_expr=(df1[“name”]==df2[列[0]]
对于[1:]列中的c:
join_expr=join_expr |(df1[“name”]==df2[c])
或者使用
functools.reduce

从functools导入reduce
join_expr=reduce(
lambda e,c:e |(df1[“name”]==df2[c]),
列[1:],
df1[“名称”]==df2[列[0]]
)
现在使用
join\u expr
加入:

df=df1.join(df2,on=join\u expr)