如何从pyspark/python数据集中的上一个计算列中获取值

7vhp5slm  于 2021-06-24  发布在  Hive
关注(0)|答案(1)|浏览(310)

我试图在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列值)
(对于第1行,因为之前没有b的值,所以它是0)
请帮助我使用python/pyspark查询代码

slmsl1lt

slmsl1lt1#

如果没有上下文,我可能错了,但似乎你试图做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的最后一个值迭代地添加新行,并且假设dataframe中的b值在此期间没有变化,那么我认为您最好在标准python变量中记住b,并用它构建下面的行。

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)

相关问题