【问题标题】:PySpark get value of dataframe column with max datePySpark获取具有最大日期的数据框列的值
【发布时间】:2021-04-11 23:40:24
【问题描述】:

我需要使用窗口上最大日期行中的列值在 pyspark 数据框中创建一个新列。鉴于下面的数据框,我需要根据最近日期的调整因子在每个assetId 的每条记录上设置一个名为 max_adj_factor 的新列。

+----------------+-------+----------+-----+
|adjustmentFactor|assetId|      date|  nav|
+----------------+-------+----------+-----+
|9.96288362069999|4000123|2019-12-20| 18.5|
|9.96288362069999|4000123|2019-12-23|18.67|
|9.96288362069999|4000123|2019-12-24| 18.6|
|9.96288362069999|4000123|2019-12-26|18.57|
|10.0449181987999|4000123|2019-12-27|18.46|
|10.0449181987999|4000123|2019-12-30|18.41|
|10.0449181987999|4000123|2019-12-31|18.34|
|10.0449181987999|4000123|2020-01-02|18.77|
|10.0449181987999|4000123|2020-01-03|19.07|
|10.0449181987999|4000123|2020-01-06|19.16|
|10.0449181987999|4000123|2020-01-07| 19.2|

【问题讨论】:

  • 你的预期输出是什么?

标签: pyspark


【解决方案1】:

您可以在 Window 上使用 max_by

df.withColumn("max_adj_factor", \
        F.expr("max_by(adjustmentFactor, date)") \
        .over(Window.partitionBy("assetId"))) \
        .show()

输出:

+----------------+-------+----------+-----+----------------+
|adjustmentFactor|assetId|      date|  nav|  max_adj_factor|
+----------------+-------+----------+-----+----------------+
|9.96288362069999|4000123|2019-12-20| 18.5|10.0449181987999|
|9.96288362069999|4000123|2019-12-23|18.67|10.0449181987999|
|9.96288362069999|4000123|2019-12-24| 18.6|10.0449181987999|
|9.96288362069999|4000123|2019-12-26|18.57|10.0449181987999|
|10.0449181987999|4000123|2019-12-27|18.46|10.0449181987999|
|10.0449181987999|4000123|2019-12-30|18.41|10.0449181987999|
|10.0449181987999|4000123|2019-12-31|18.34|10.0449181987999|
|10.0449181987999|4000123|2020-01-02|18.77|10.0449181987999|
|10.0449181987999|4000123|2020-01-03|19.07|10.0449181987999|
|10.0449181987999|4000123|2020-01-06|19.16|10.0449181987999|
|10.0449181987999|4000123|2020-01-07| 19.2|10.0449181987999|
+----------------+-------+----------+-----+----------------+

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-01-08
    • 1970-01-01
    • 1970-01-01
    • 2014-02-01
    • 1970-01-01
    • 1970-01-01
    • 2018-08-20
    • 2021-04-14
    相关资源
    最近更新 更多