2016-04-25 115 views
1

我有两个数据帧,我从两个csv文件中加载。例子:PySpark:如何比较两个数据帧

old 
+--------+---------+----------+ 
|HOTEL ID|GB  |US  | 
+--------+---------+----------+ 
| 80341|  0.78|  0.7| 
| 255836|  0.6|  0.6| 
| 245281|  0.78|  0.99| 
| 229166|  0.0|  0.7| 
+--------+---------+----------+ 

new 
+--------+---------+----------+ 
|HOTEL ID|GB  |US  | 
+--------+---------+----------+ 
| 80341|  1 |  0.7| 
| 255836|  0.6|  1 | 
| 245281|  0.78|  0.99| 
| 333 |  0.0|  0.7| 
+--------+---------+----------+ 

,我想获得:

expected result 
+--------+---------+----------+ 
|HOTEL ID|GB  |US  | 
+--------+---------+----------+ 
| 80341|  1 |  None| 
| 255836|  None|  1 | 
| 333 |  0.0|  0.7| 
+--------+---------+----------+ 

我一直在摆弄与数据帧的foreach方法,但未能得到它的工作......作为火花新手将不胜感激任何线索。

干杯!

拉斐尔

+0

实际上可以得到最后| 333 | 0.0 | 0.7 |通过使用减法(),通过细胞比较,仍然无能为力。 – Rafael

回答

-1

你能提供关于您在新与旧运行得到预期的结果,操作更详细?

您是否还在旧数据框和新数据框之间对GB和US列进行算术运算?

如果不是加入好像你可能会寻找 如果顺序是不一样的之间的两个dataframes你会做什么加入第一

#renaming column names for convenience 
newDF=new.toDF('HOTEL ID','N_GB','N_US') 
#doing an inner join (lookup sql joins for the type of join you need) 
old.join(newDF,'HOTEL ID','inner') 

这会给你一个表模式

| HOTEL ID | US | DB | N_US | N_GB | 
|----------|----|----|------|------| 
| 80341 |0.78| 0.7|1  | 0.7 | 
|   | | |  |  | 
|   | | |  |  | 
+0

感谢您的回复,新旧操作能够得到预期的结果就是我所追求的:)。我希望将单元格值保留为新的,替换旧的单元格值,并在新旧值相同时(对于同一个单元格),将空值或空值赋予新值。生成的数据框应该与旧的和新的列具有相同的列。干杯。 – Rafael