Apache spark 在多个条件下连接两个数据帧
我有两张表,第一张是测试申请表,第二张是实际测试表。我希望以这样一种方式连接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-24Apache 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(
您可以根据
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|
+--------+----------+------+