Sql Pyspark-如何按主键删除记录?

Sql Pyspark-如何按主键删除记录?,sql,dataframe,pyspark,apache-spark-sql,Sql,Dataframe,Pyspark,Apache Spark Sql,如果new\u-df具有键metric\u-id的del标志,我想从old\u-df中删除记录。实现这一目标的正确方法是什么 old_df(此处的标志故意用空值填充) 新德里 +---------+--------+-------------+ |metric_id| flag | value| +---------+--------+-------------+ | 10| del| value2| | 12| pass|up

如果
new\u-df
具有键
metric\u-id
del
标志,我想从
old\u-df
中删除记录。实现这一目标的正确方法是什么

old_df(此处的标志故意用空值填充)

新德里

+---------+--------+-------------+
|metric_id| flag   |        value|
+---------+--------+-------------+
|       10|     del|       value2|
|       12|    pass|updated_value|
|       15|     del|  test_value2|
+---------+--------+-------------+
结果

+---------+--------+-------------+
|metric_id| flag   |        value|
+---------+--------+-------------+
|       12|    pass|updated_value|
+---------+--------+-------------+

一种简单的方法是加入然后筛选:

result_df = (
      old_df.join(new_df, on='metric_id', how='left')
            .where((new_df['flag'].isNull()) | (new_df['flag'] != lit('del')))
            .select('metric_id', new_df['flag'], new_df['value'])
)
产生

+---------+----+-------------+
|metric_id|flag|        value|
+---------+----+-------------+
|       12|pass|updated_value|
+---------+----+-------------+
我使用的是
联接,因为
旧_-df
中可能有一些记录的主键在
新_-df
中不存在(您不想删除这些记录)

+---------+----+-------------+
|metric_id|flag|        value|
+---------+----+-------------+
|       12|pass|updated_value|
+---------+----+-------------+