Pyspark:查找两个数据框的交集只返回一列值



我有一个具有这些值的数据帧-商店ID,项目可用与否(0或1)和可用性百分比。

Store ID    Item_1_Available    Percent Available
100                 0               0
200                 1               0.2
300                 0               0
400                 1               0.9

还有一个数据帧,它用于不同的Item和可用性指标。也可能有来自第一个表的商店ID在这里-同一商店销售不同的商品

Store ID    Item_2_Available    Percent Available
400                 1             0.8
600                 1             0.7
700                 0             0
100                 1             0.5

我试图得到一个最终表(50多个项目与下面的结构)。

Store ID    Item_1_Available    Percent Available   Item_2_Available    Percent Available
100                 0           0                     1                 0.5
200                 1           0.2                   0                 0
300                 0           0                     0                 0
400                 1           0.9                   1                 0.8
600                 0           0                     1                 0.7
700                 0           0                     0                 0

我尝试使用spark做一个相交来获得最终表,这样我就可以找到同时拥有Item 1和Item 2的商店。

from functools import reduce
from pyspark.sql import DataFrame
def intersect(*dfs):
return reduce(DataFrame.intersect, dfs)
final_table = intersect(df1, df2)

但是它只返回第一个表中的一列作为输出。

Store ID    Item_1_Available
100         1
200         0
300         0
400         1

是否有一种方法可以在两个表上执行连接以获得最终表?

from pyspark.sql import SparkSession
spark = SparkSession.builder.getOrCreate()
storeDF1 = spark.read.csv("store1.txt",header="True")
storeDF2 = spark.read.csv("store2.txt",header="True")
storeDF1.join(storeDF2,on="Store ID",how="full").show(truncate=False)
+--------+----------------+------------------------+----------------+--- 
---------------------+
|Store ID|Item_1_Available|Percent Available item 
1|Item_2_Available|Percent Available item 2|
+--------+----------------+------------------------+----------------+--- 
---------------------+
|700     |null            |null                    |0               |0                       
|
|200     | 1              |0.2                     |null            
|null                    |
|300     | 0              |0                       |null            
|null                    |
|100     | 0              |0                       |1               |0.5                     
|
|600     |null            |null                    |1               |0.7                     
|
|400     | 1              |0.9                     |1               |0.8                     
|
+--------+----------------+------------------------+----------------+--- 
---------------------+

为可用列百分比使用不同的名称,以避免在要对该列执行操作时出现列歧义错误。

最新更新