如何合并所有数据帧具有相同索引列的多个 pyspark 数据帧?
How to merge multiple pyspark dataframes where all dataframes have same index columns?
我使用以下代码创建了 pyspark 数据帧:
df_1 = sqlContext.createDataFrame(df_1)
df_2 = sqlContext.createDataFrame(df_2)
df_3 = sqlContext.createDataFrame(df_3)
df_4 = sqlContext.createDataFrame(df_4)
这些数据帧中的每一个都有2个公共列,我们可以将其用作索引列,其他列不同。我想合并两个数据框。
df_1
Firm
Product
Date
Parameter-A
Firm-A
Product-1
30-01-2019
3
df_2
Firm
Product
Date
Parameter-B
Firm-A
Product-1
30-01-2019
4
df_3
Firm
Product
Date
Parameter-C
Firm-A
Product-1
30-01-2019
5
df_4
Firm
Product
Date
Parameter-D
Firm-A
Product-1
30-01-2019
6
我希望生成的数据框如下所示。
df_result
Firm
Product
Date
Parameter-A
Parameter-B
Parameter-C
Parameter-D
Firm-A
Product-1
30-01-2019
3
4
5
6
我试过下面的代码,但它只适用于 pandas 数据帧。
import pandas as pd
from functools import reduce
df = [df_1, df_2, df_3, df_4]
df_result = reduce(lambda left,right: pd.merge(left,right, how= 'left', on=['Firm', 'Product']), df)
这样做:
merged_df = df1.join(df2,on=['Firm', 'Product'], how='outer')\
.join(df3,on=['Firm', 'Product'], how='outer')\
.join(df4,on=['Firm', 'Product'], how='outer')\
.join(df5,on=['Firm', 'Product'] how='outer')\
.na.drop()
.show()
display(merged_df)
我使用以下代码创建了 pyspark 数据帧:
df_1 = sqlContext.createDataFrame(df_1)
df_2 = sqlContext.createDataFrame(df_2)
df_3 = sqlContext.createDataFrame(df_3)
df_4 = sqlContext.createDataFrame(df_4)
这些数据帧中的每一个都有2个公共列,我们可以将其用作索引列,其他列不同。我想合并两个数据框。
df_1
Firm | Product | Date | Parameter-A |
---|---|---|---|
Firm-A | Product-1 | 30-01-2019 | 3 |
df_2
Firm | Product | Date | Parameter-B |
---|---|---|---|
Firm-A | Product-1 | 30-01-2019 | 4 |
df_3
Firm | Product | Date | Parameter-C |
---|---|---|---|
Firm-A | Product-1 | 30-01-2019 | 5 |
df_4
Firm | Product | Date | Parameter-D |
---|---|---|---|
Firm-A | Product-1 | 30-01-2019 | 6 |
我希望生成的数据框如下所示。
df_result
Firm | Product | Date | Parameter-A | Parameter-B | Parameter-C | Parameter-D |
---|---|---|---|---|---|---|
Firm-A | Product-1 | 30-01-2019 | 3 | 4 | 5 | 6 |
我试过下面的代码,但它只适用于 pandas 数据帧。
import pandas as pd
from functools import reduce
df = [df_1, df_2, df_3, df_4]
df_result = reduce(lambda left,right: pd.merge(left,right, how= 'left', on=['Firm', 'Product']), df)
这样做:
merged_df = df1.join(df2,on=['Firm', 'Product'], how='outer')\
.join(df3,on=['Firm', 'Product'], how='outer')\
.join(df4,on=['Firm', 'Product'], how='outer')\
.join(df5,on=['Firm', 'Product'] how='outer')\
.na.drop()
.show()
display(merged_df)