【问题标题】:Pyspark Dataframe - How to concatenate columns based on array of columns as inputPyspark Dataframe - 如何基于列数组作为输入连接列
【发布时间】:2020-06-06 05:29:59
【问题描述】:

我有 10 列的数据框并且想要执行功能 - 基于作为输入的列数组的连接:

arr = ["col1", "col2", "col3"]

这是目前为止的:

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

还有:

df3 = df2.join(df1, concat( df2.col1, df2.col2, df2.col3, df2.col3 ) == df1.col5 ) 

但我想根据输入数组创建一个循环或函数来执行此操作(而不是像现在这样对其进行硬编码)。

最好的方法是什么?

【问题讨论】:

  • 你能发布你的预期输出吗?

标签: python arrays dataframe pyspark


【解决方案1】:

您可以使用 (*) 解压缩列。在 pyspark.sql 文档中,如果任何函数有 (*cols),这意味着您可以解压缩 cols。 对于连接:

pyspark.sql.functions.concat(*cols)

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 )

【讨论】:

  • 口头解释通常很有帮助
  • 另外——这部分会怎么做? df3 = df2.join(df1, concat( df2.col1, df2.col2, df2.col3, df2.col3 ) == df1.col5 )
猜你喜欢
  • 2020-10-16
  • 2019-08-05
  • 2022-12-12
  • 2018-03-16
  • 1970-01-01
  • 2022-01-20
  • 2022-06-29
  • 1970-01-01
  • 2020-02-17
相关资源
最近更新 更多