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