python - 如何从 Pyspark / Python 数据集中先前计算的列中获取值
问题描述
我正在尝试在 Pyspark / Python 表中创建一个新列(B)。新列(B)是:列(A)的当前值+列(B)的先前值的总和
`Id a b
1 977 977
2 3665 4642
3 1746 6388
4 2843 9231
5 200 9431`
当前列 B = 当前列 A + 先前列 B ;例如第 4 行:9231(B 列)= 2843(A 列)+ 6388(以前的 B 列值)
(对于第一行,因为 B 没有先前的值,所以它是 0)
请帮助我使用 Python / PySpark 查询代码
解决方案
如果没有上下文,我可能是错的,但似乎你试图做 A 列的累积总和:
from pyspark.sql.window import Window
import pyspark.sql.functions as sf
df = df.withColumn('B', sf.sum(df.A).over(Window.partitionBy().orderBy().rowsBetween(
Window.unboundedPreceding, 0)))
编辑:
如果您需要根据 B 的最后一个值迭代地添加新行,并假设数据框中 B 的值在此期间没有变化,我认为您最好将 B 记住在标准 python 变量中并构建以下行接着就,随即。
previous_B = 0
# your code to get new A
previous_B += new_A
new_row = spark.createDataFrame([(new_A, previous_B)])
df = df.union(new_row)
推荐阅读
- ruby-on-rails - Google::Apis::RateLimitError: userRateLimitExceeded: 超出用户速率限制。用户请求率超过配置的项目配额
- hyperledger-fabric - 使用 Composer 在 HyperLedger Fabric 中基于标准的事件订阅
- ios - 如何在 iOS 中使用 googlemap 创建 customMarkerView
- node.js - EISDIR:对目录的非法操作,读取+Nodemailer图片附件
- c# - 如何使用 C# 解析 BsonDocument
- javascript - 如何在使用 Mongoose 时更新嵌套对象
- parameters - 看不懂参数
- android - Firebase 身份验证电话重新注册
- javascript - 数学四舍五入并在 div 中显示
- javascript - jQRangeSlider 不能与 Bootstrap 一起使用?版本冲突?