Dataframe PySpark:如何比较两个数据帧

Dataframe PySpark:如何比较两个数据帧,dataframe,pyspark,spark-csv,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|

我有两个从两个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|
+--------+---------+----------+
我一直在摆弄DataFrameforeach方法,但未能使其正常工作。。。作为一个有火花的新手,如果有任何线索都会很感激

干杯


Rafael

您能否提供有关您在新旧设备上运行以获得预期结果的操作的更多详细信息

您是否也在新旧数据帧之间对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  |
|          |    |    |      |      |
|          |    |    |      |      |

实际上,通过使用减法可以获得最后一行| 333 | 0.0 | 0.7 |,但对逐单元格比较仍然一无所知。感谢您的回复,为获得预期结果而对新旧操作正是我所追求的:。我希望将单元格值保留为新值,替换旧值中的值,并在同一单元格的新旧值相同时输入null或空值。生成的数据帧应具有与旧数据帧和新数据帧相同的列。干杯