首页 > 解决方案 > Pyspark Dataframe 复制列中先前的最大值(int 或 date)

问题描述

我有一个 Pyspark 数据框,在数量列中有以下值: 输入数据框

必须将先前的最高值复制到以下记录(行),直到在列中遇到更高的值,依此类推。

金额列中的预期值为: 输出数据框

有人可以帮助我吗?提前致谢。

标签: pythonpysparkapache-spark-sql

解决方案


你的问题不清楚,但在我看来,你想为每一行找到“到目前为止”的最大值,直到当前行。在SQL它进行如下 -

首先,我会row_number在数据中添加一个简单的子句。您必须将您的df保存为表格,如下所示df.registerTempTable('df_spark')-

spark.sql(""" 
    SELECT 
        amount, 
        ROW_NUMBER() OVER(ORDER BY RAND()) AS RN
    FROM df_spark
""").show()

输出 -

+------+---+
|amount| RN|
+------+---+
|  2000|  1|
|  1000|  2|
|  1000|  3|
|  3000|  4|
+------+---+

然后,添加滚动MAX子句 -

spark.sql("""  
SELECT 
    amount, MAX(amount) OVER(ORDER BY RN) AS rolling_max
FROM (
    SELECT 
        amount, 
        ROW_NUMBER() OVER(ORDER BY RAND()) AS RN
    FROM 
    df_spark
)
""").show()

输出 -

+------+-----------+
|amount|rolling_max|
+------+-----------+
|  1000|       1000|
|  3000|       3000|
|  1000|       3000|
|  2000|       3000|
+------+-----------+

推荐阅读