Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/345.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
Python Pyspark Dataframe-如何基于列数组连接列作为输入_Python_Arrays_Dataframe_Pyspark - Fatal编程技术网

Python Pyspark Dataframe-如何基于列数组连接列作为输入

Python Pyspark Dataframe-如何基于列数组连接列作为输入,python,arrays,dataframe,pyspark,Python,Arrays,Dataframe,Pyspark,我有10列的dataframe,希望基于作为输入的列数组进行函数连接: arr = ["col1", "col2", "col3"] 目前的情况是: newDF = rawDF.select(concat(col("col1"), col("col2"), col("col3") )).exceptAll(updateDF.select( concat(col("col1"), col("col2"), col("col3") ) ) ) 此外: 但我想基于输入数组(而不是像现在这样硬编码)

我有10列的dataframe,希望基于作为输入的列数组进行函数连接:

arr = ["col1", "col2", "col3"]
目前的情况是:

newDF = rawDF.select(concat(col("col1"), col("col2"), col("col3") )).exceptAll(updateDF.select( concat(col("col1"), col("col2"), col("col3") ) ) )
此外:

但我想基于输入数组(而不是像现在这样硬编码)创建一个循环或函数来实现这一点


最好的方法是什么?

您可以使用(*)打开COL的包装。在pyspark.sql文档中,如果任何函数都有(*cols),这意味着您可以解压缩cols。 对于concat:

pyspark.sql.functions.concat(*cols)

对于联接:

arr=['col1','col2','col3']
df3 = df2.join(df1, F.concat(*(F.col(col) for col in arr)) == df1.col5 )

你能发布你的预期输出吗?口头解释通常也很有用-这部分怎么做
df3=df2.join(df1,concat(df2.col1,df2.col2,df2.col3,df2.col3)==df1.col5)
from pyspark.sql import functions as F
arr = ["col1", "col2", "col3"]
newDF = rawDF.select(F.concat(*(F.col(col) for col in arr))).exceptAll(updateDF.select(F.concat(*(F.col(col) for col in arr))))
arr=['col1','col2','col3']
df3 = df2.join(df1, F.concat(*(F.col(col) for col in arr)) == df1.col5 )