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

Pyspark 如何连接两个数据帧并从数据帧中减去两列,pyspark,apache-spark-sql,pyspark-sql,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["coale

我有两个数据帧,如下所示 我试图根据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())

我会做一些不同的事情。为了更容易知道数据框中的列,我将对它们进行重命名。我也会在连接本身之外进行合并

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

我会做一些不同的事情。为了更容易知道数据框中的列,我将对它们进行重命名。我也会在连接本身之外进行合并

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

你所说的减法不起作用是什么意思?。此外,您试图通过连接上的合并实现什么?coalesce是一个返回非空值的函数,在本例中是ID…我正在连接从coalesce函数返回的值。除此之外,我还想显示差异量以及ID(源自coalesce函数),我了解coalesce的工作原理。在示例数据中,您没有空值。更改数据以反映相同的值您所说的
减法不起作用是什么意思?。此外,您试图通过连接上的合并实现什么?coalesce是一个返回非空值的函数,在本例中是ID…我正在连接从coalesce函数返回的值。除此之外,我还想显示差异量以及ID(源自coalesce函数),我了解coalesce的工作原理。在示例数据中,没有空值。已更改数据以反映相同的空值