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

问题描述 投票:0回答:1

我有两个如下所示的数据框我正在尝试根据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())
pyspark apache-spark-sql pyspark-sql
1个回答
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|
+-------+-------+-------+------+
© www.soinside.com 2019 - 2024. All rights reserved.