如何在 PySpark 中按条件加入两个数据框?

How to join the two dataframe by condition in PySpark?

我有两个如下所述的数据框

数据帧 1

P_ID     P_Name     P_Description   P_Size

100      Moto          Mobile         16

200      Apple         Mobile         15

300      Oppo          Mobile         18

数据帧 2

P_ID     List_Code      P_Amount     

100      ALPHA           20000         

100      BETA            60000  

300      GAMMA           15000    

要求: 需要通过 P_ID 加入两个数据帧。

关于数据框的信息: 在数据框 1 P_ID 中是一个主键,而数据框 2 没有任何主属性。

如何加入数据框 需要根据附加“_price”的数据框 2 List_Code 的值在数据框 1 中创建新列。如果数据框 2 List_Code 包含 20 个唯一值,我们需要在数据框 1 中创建 20 列。然后,我们根据 P_ID 如果存在,则用零填充。创建数据框后,我们需要根据 P_ID 加入数据框。如果我们在数据框 1 中添加具有预期值的列,我们就可以加入数据框。我的问题是创建具有预期值的新列。

预期的数据帧如下所示

预期数据帧

   P_ID     P_Name     P_Description   P_Size   ALPHA_price   BETA_price    GAMMA_price

    100      Moto          Mobile         16       20000       60000           0

    200      Apple         Mobile         15         0            0            0

    300      Oppo          Mobile         18         0            0           15000

你能帮我解决这个问题吗,先谢谢了。

对于您的应用程序,您需要旋转第二个数据帧,然后使用左连接将第一个数据帧连接到 P_ID 上的旋转结果。

查看下面的代码。

df_1 = pd.DataFrame({'P_ID' : [100, 200, 300], 'P_Name': ['Moto', 'Apple', 'Oppo'], 'P_Size' : [16, 15, 18]})
sdf_1 = sc.createDataFrame(df_1)

df_2 = pd.DataFrame({'P_ID' : [100, 100, 300], 'List_Code': ['ALPHA', 'BETA', 'GAMMA'], 'P_Amount' : [20000, 60000, 10000]})
sdf_2 = sc.createDataFrame(df_2)

sdf_pivoted = sdf_2.groupby('P_ID').pivot('List_Code').agg(f.sum('P_Amount')).fillna(0)



sdf_joined = sdf_1.join(sdf_pivoted, on='P_ID', how='left').fillna(0)
sdf_joined.show()

+----+------+------+-----+-----+-----+
|P_ID|P_Name|P_Size|ALPHA| BETA|GAMMA|
+----+------+------+-----+-----+-----+
| 300|  Oppo|    18|    0|    0|10000|
| 200| Apple|    15|    0|    0|    0|
| 100|  Moto|    16|20000|60000|    0|
+----+------+------+-----+-----+-----+

您可以根据需要更改列名或数据框的顺序。