Apache spark 在多个条件下连接两个数据帧

Apache spark 在多个条件下连接两个数据帧,apache-spark,pyspark,apache-spark-sql,Apache Spark,Pyspark,Apache Spark Sql,我有两张表,第一张是测试申请表,第二张是实际测试表。我希望以这样一种方式连接2df,即结果表应该有列“NoShows”。本栏描述了该人员在该日期预约,但实际上在考试日期没有参加考试。 范例- 拟人 测试日期 x 2021-02-12 Y 2021-03-18 x 2020-11-01 Z 2020-09-10 Y 2021-01-08 Z 2020-12-24 您可以根据ActualtestDate是否为null执行左联接并创建新列: result = testappointment.join(

我有两张表,第一张是测试申请表,第二张是实际测试表。我希望以这样一种方式连接2df,即结果表应该有列“NoShows”。本栏描述了该人员在该日期预约,但实际上在考试日期没有参加考试。 范例-

拟人 测试日期 x 2021-02-12 Y 2021-03-18 x 2020-11-01 Z 2020-09-10 Y 2021-01-08 Z 2020-12-24
您可以根据
ActualtestDate
是否为null执行左联接并创建新列:

result = testappointment.join(
    test, 
    (testappointment.testDate == test.ActualtestDate) & (testappointment.personId == test.personId), 
    'left'
).select(
    testappointment.personId, 
    testappointment.testDate, 
    test.ActualtestDate.isNull().alias('noshow')
)

result.show()
+--------+----------+------+
|personId|  testDate|noshow|
+--------+----------+------+
|       x|2021-02-12| false|
|       y|2021-03-18| false|
|       x|2020-11-01| false|
|       z|2020-09-10| false|
|       y|2021-01-08|  true|
|       z|2020-12-24|  true|
+--------+----------+------+

z有两个相同的日期,那么为什么它算不上不露面呢?是的,我的错,只有y(2021-01-08)是不露面的。“那么我该如何解决这个问题呢?”麦克编辑了这个问题。
result = testappointment.join(
    test, 
    (testappointment.testDate == test.ActualtestDate) & (testappointment.personId == test.personId), 
    'left'
).select(
    testappointment.personId, 
    testappointment.testDate, 
    test.ActualtestDate.isNull().alias('noshow')
)

result.show()
+--------+----------+------+
|personId|  testDate|noshow|
+--------+----------+------+
|       x|2021-02-12| false|
|       y|2021-03-18| false|
|       x|2020-11-01| false|
|       z|2020-09-10| false|
|       y|2021-01-08|  true|
|       z|2020-12-24|  true|
+--------+----------+------+