Python Pyspark-如何检查两条记录中的哪一条具有最新日期及其列值?

Python Pyspark-如何检查两条记录中的哪一条具有最新日期及其列值?,python,python-3.x,pyspark,apache-spark-sql,Python,Python 3.x,Pyspark,Apache Spark Sql,我有一个数据框,希望检查具有最新日期的记录是否具有特定值。例如,对于下面的DF,我需要检查Id为“B30”的记录,并获得度量值为1==0.25的记录 original_metrics_df = self.spark.createDataFrame( [('A10', -0.35, '2020-01-04'), ('A20', -0.20, '2017-05-01'), ('B30', 0.59, '2018-02-08'), ('B30', 0.25, '2

我有一个数据框,希望检查具有最新日期的记录是否具有特定值。例如,对于下面的DF,我需要检查Id为“B30”的记录,并获得
度量值为1
==0.25的记录

original_metrics_df = self.spark.createDataFrame(
    [('A10', -0.35, '2020-01-04'),
     ('A20', -0.20, '2017-05-01'),
     ('B30', 0.59, '2018-02-08'),
     ('B30', 0.25, '2019-05-01')
     ],
    ['id', 'metric_1', 'transaction_date']
)
首先,我进行了筛选,只保留Id为B30的记录:

filtered_metrics_df=原始_metrics_df。选择('id','metric_1')。过滤器(F.col('metric_1')=='B30')


我应该如何进一步应用过滤以仅获取此记录的
度量值
('B30',0.25',2019-05-01')

您可以在窗口上尝试:

如果事务处理日期不是日期列,请转换为日期:

original_metrics_df = original_metrics_df.withColumn("transaction_date",
                                F.to_date("transaction_date"))
然后,我们可以通过窗口获取最大日期,并选择所需条件:

w = Window.partitionBy("id")
cond = (F.col("id")=="B30") & (F.col("transaction_date")==F.col("Latest_date"))

(original_metrics_df.withColumn("Latest_date",F.max("transaction_date").over(w))
 .filter(cond).drop("Latest_date")).show()

或者,先在已知条件下过滤,然后执行相同的操作:

w = Window.partitionBy("id")

(original_metrics_df.filter(F.col("id")=="B30")
  .withColumn("Latest_date",F.max("transaction_date").over(w))
  .filter(F.col("transaction_date")==F.col("Latest_date"))).show()

@anky“交易日期”列中没有重复项
w = Window.partitionBy("id")

(original_metrics_df.filter(F.col("id")=="B30")
  .withColumn("Latest_date",F.max("transaction_date").over(w))
  .filter(F.col("transaction_date")==F.col("Latest_date"))).show()