如何比较两个数据帧并标记一个数据帧?

时间:2018-02-08 15:31:27

标签: python pyspark pyspark-sql

您好我有两个数据帧如下所示,并尝试获取结果数据帧,如下所示。

只想比较ID列的数据帧。

id  name    item    price   
1   abc      pen    10  
2   bcd      pencil 10  
3   cde      book   100 
4   def      stick  50  
5   abc      pencil 10  


id  name    item    price   
2   xyz     pen     10  
50  ahjl    phone   1000    
1   fff     mouse   200 
5   ank     stamp   20  
49  anve    cable   2000    

结果表

id  name    item    price   flag
2   xyz      pen    10      yes
5   ank      stamp  20      yes
1   fff      mouse  200     yes
50  ahjl     phone  1000    no
49  anve     cable  2000    no

能够使用python pandas实现这一目标。 你可以帮我用pyspark来帮助我。

谢谢,

Ankush Reddy

1 个答案:

答案 0 :(得分:1)

假设您的数据框分别称为df1df2

import pyspark.sql.functions as F

df2.join(
    df1.selectExpr("id", "'yes' as flag").dropDuplicates(), 
    ["id"], "left"
).withColumn("flag", F.coalesce(F.col("flag"), F.lit("no"))).show()

+---+-----+----+-----+----+
| id| item|name|price|flag|
+---+-----+----+-----+----+
| 50|phone|ahjl| 1000|  no|
|  5|stamp| ank|   20| yes|
|  1|mouse| fff|  200| yes|
| 49|cable|anve| 2000|  no|
|  2|  pen| xyz|   10| yes|
+---+-----+----+-----+----+

详细说明:

  • flag df1预填充yesdf2;
  • 加入null,并将flag列中的no替换为-f;