PySpark:如何比较两个数据帧

时间:2016-04-25 18:25:18

标签: dataframe pyspark spark-csv

我有两个数据帧,我从两个csv文件加载。例子:

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方法,但未能让它工作......作为一个火花新手会感激任何线索。

干杯!

圣拉斐尔

1 个答案:

答案 0 :(得分:-1)

您是否可以提供有关新旧运行的更多详细信息以获得预期结果?

您是否也在旧数据帧和新数据帧之间对GB和US列进行一些算术运算?

如果没有加入似乎你可能正在寻找 如果两个数据帧之间的顺序不同,则必须先进行连接

#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  |
|          |    |    |      |      |
|          |    |    |      |      |