python - Pyspark Dataframe 复制列中先前的最大值(int 或 date)
问题描述
我有一个 Pyspark 数据框,在数量列中有以下值: 输入数据框
必须将先前的最高值复制到以下记录(行),直到在列中遇到更高的值,依此类推。
金额列中的预期值为: 输出数据框
有人可以帮助我吗?提前致谢。
解决方案
你的问题不清楚,但在我看来,你想为每一行找到“到目前为止”的最大值,直到当前行。在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|
+------+-----------+
推荐阅读
- css - JavaFx CSS 通配符
- python - 使用 Beautiful Soup + Python 脚本从打开中排除搜索链接
- azure - 如何在 Azure 中运行多个 SQL Server 容器并确保在它们之间复制数据?
- firebase - 重新发送验证码 Firebase 电话身份验证
- regex - egrep -o :Linux 和 MacOS 中的不同行为
- caching - `perf stat` 中的“page-faults”对于“后端周期空闲”是什么意思?
- algorithm - 数字重复的时间复杂度
- php - 单击提交按钮后如何向用户输入的电子邮件地址发送电子邮件?在php中
- javascript - 访问时更改导航栏中元素的颜色
- php - codeigniter ajax搜索不起作用