Pyspark - 如何将多个数据帧的列连接成一个数据帧的列

Posted

技术标签:

【中文标题】Pyspark - 如何将多个数据帧的列连接成一个数据帧的列【英文标题】:Pyspark - How to concatenate columns of multiple dataframes into columns of one dataframe 【发布时间】:2019-05-06 17:20:14 【问题描述】:

我有一列有多个数据框(总共 24 个)。我需要将所有这些组合到一个数据框中。我创建了索引并使用索引加入了索引,但是加入所有索引的速度很慢(所有索引的行数都相同)。

请注意,我使用的是 Pyspark 2.1

w = Window().orderBy(lit('A'))
df1 = df1.withColumn('Index',row_number().over(w))
df2 = df2.withColumn('Index',row_number().over(w))
joined_df = df1.join(df2,df1.Index=df2.Index,'Inner').drop(df2.Index)
df3 = df3.withColumn('Index',row_number().over(w))
joined_df = joined_df.join(df3,joined_df.Index=df3.Index).drop(df3.Index)

但是随着joined_df的增长,它越来越慢

DF1:

Col1
 2
 8
 18
 12

DF2:

Col2
 abc
 bcd
 def
 bbc

DF3:

Col3
 1.0
 2.2
 12.1
 1.9

预期结果:

joined_df:

Col1  Col2  Col3
 2     abc   1.0
 8     bcd   2.2
 18    def   12.1
 12    bbc   1.9

【问题讨论】:

你的做法是正确的。不幸的是,没有主键,spark 不适合这种类型的操作。 【参考方案1】:

你的做法是正确的。不幸的是,没有主键,spark 不适合这种类型的操作。


由pault 回答,来自comment。

【讨论】:

以上是关于Pyspark - 如何将多个数据帧的列连接成一个数据帧的列的主要内容,如果未能解决你的问题,请参考以下文章

为 pyspark 数据帧的每一行评估多个 if elif 条件

如何使用pyspark将具有多个可能值的Json数组列表转换为数据框中的列

两个数据帧的数组列的平均值并在pyspark中找到最大索引

如何将包含多个键值对的列拆分为pyspark中的不同列

如何在pyspark中连接具有相同名称的列的值

randomSplit pyspark 更改数据帧的值