【发布时间】:2022-11-03 18:32:49
【问题描述】:
我有一个 SQL 查询,我正在尝试将其转换为 PySpark。在 SQL 查询中,我们正在加入三表并更新匹配的列。 SQL 查询如下所示:
UPDATE [DEPARTMENT_DATA]
INNER JOIN ([COLLEGE_DATA]
INNER JOIN [STUDENT_TABLE]
ON COLLEGE_DATA.UNIQUEID = STUDENT_TABLE.PROFESSIONALID)
ON DEPARTMENT_DATA.PUBLICID = COLLEGE_DATA.COLLEGEID
SET STUDENT_TABLE.PRIVACY = "PRIVATE"
我试过的逻辑:
df_STUDENT_TABLE = (
df_STUDENT_TABLE.alias('a')
.join(
df_COLLEGE_DATA('b'),
on=F.col('a.PROFESSIONALID') == F.col('b.UNIQUEID'),
how='left',
)
.join(
df_DEPARTMENT_DATA.alias('c'),
on=F.col('b.COLLEGEID') == F.col('c.PUBLICID'),
how='left',
)
.select(
*[F.col(f'a.{c}') for c in df_STUDENT_TABLE.columns],
F.when(
F.col('b.UNIQUEID').isNotNull() & F.col('c.PUBLICID').isNotNull()
F.lit('PRIVATE')
).alias('PRIVACY')
)
)
此代码正在添加一个新列“PRIVACY”,但在运行后给出空值。
【问题讨论】:
-
您能否编辑您的问题以添加示例数据、预期输出和您得到的输出?
-
如果我们的连接运算符的 ON 条件满足,我想要的预期输出我们必须更新数据框中的列 PRIVACY,其值为“PRIVATE”。
-
PRIVACY Column 已经存在于我们的 Dataframe 中并且当前为 Null,我们正在通过应用连接条件将值加载到 Column 中
标签: apache-spark pyspark sql-update inner-join azure-databricks