如何合并两个数据框并从数据框中减去两列

时间:2020-02-11 14:34:44

标签: pyspark apache-spark-sql pyspark-sql

我有两个如下所示的数据框 我正在尝试根据ID查找两个金额之间的差异

数据框1:

ID  I Amt
1   null 200
null   2 200
3   null 600

dataframe 2

ID I  Amt
2  null  300
3  null  400

Output
Df
ID Amt(df2-df1)
2  100
3  -200

查询不起作用: 减法不起作用

df = df1.join(df2, df1["coalesce(ID, I)"] == df2["coalesce(ID, I)"], 'inner').select
((df1["amt)"]) – (df2["amt”])), df1["coalesce(ID, I)"].show())

1 个答案:

答案 0 :(得分:0)

我会做一些不同的事情。为了更容易知道什么数据框中的列,我将其重命名。我还可以在联接本身之外进行合并。

val joined = df1.withColumn("joinKey",coalesce($"ID",$"I")).select($"joinKey",$"Amt".alias("DF1_AMT")).join(
df2.withColumn("joinKey",coalesce($"ID",$"I")).select($"joinKey",$"Amt".alias("DF2_AMT")),"joinKey")

然后,您可以轻松执行计算:

joined.withColumn("DIFF",$"DF2_AMT" - $"DF1_AMT").show
+-------+-------+-------+------+
|joinKey|DF1_AMT|DF2_AMT|  DIFF|
+-------+-------+-------+------+
|      2|    200|    300| 100.0|
|      3|    600|    400|-200.0|
+-------+-------+-------+------+