【问题标题】:PySpark: How to compare two dataframesPySpark:如何比较两个数据帧
【发布时间】:2016-04-25 18:25:18
【问题描述】:

我有两个从两个 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|
+--------+---------+----------+

我一直在摆弄 dataframe foreach 方法,但未能使其工作......作为一个火花新手,如果有任何线索,我将不胜感激。

干杯!

拉斐尔

【问题讨论】:

  • 其实可以得到最后一个|333|0.0|0.7|通过使用减法()进行行,但仍然对逐个单元格的比较一无所知。

标签: dataframe pyspark spark-csv


【解决方案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  |
|          |    |    |      |      |
|          |    |    |      |      |

【讨论】:

  • 感谢您的回复,新旧操作以获得预期结果是我所追求的:)。我想将单元格值保留为新的,替换旧的值,并在旧值和新值相同(对于同一个单元格)时放置空值或空值。生成的数据框应具有与旧的和新的相同的列。干杯。
猜你喜欢
  • 1970-01-01
  • 2021-05-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-07-21
  • 2020-06-02
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多