Python Pyspark Dataframe-如何基于列数组连接列作为输入
我有10列的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") ) ) ) 此外: 但我想基于输入数组(而不是像现在这样硬编码)
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 )