pyspark中的累积减法

问题描述 投票:0回答:1

我想在pyspark中实现累积减法。 我有这样的数据集

计算 科伊特姆
1000 1110
100 1110
50 1110
30 1110
20 1110
2000 1210
10 1210
200 1210
-100 1210
20 1210

我想要的结果是这样的:-

计算 科伊特姆 _uncs
1000 1110 1000
100 1110 900
50 1110 850
30 1110 820
20 1110 800
2000 1210 2000
10 1210 1990
200 1210 1790
-100 1210 1890
20 1210 1870

为此,我尝试了以下代码:-

df = _cost_srt.orderBy("coitm")
partition_by = Window().partitionBy("COITM").orderBy(F.desc("COCHDJ"))
df = df.withColumn("rnb", F.row_number().over(partition_by))

df = df.withColumn(
    "_UNCS", F.when(F.col("rnb") == 1, F.col("COUNCS")).otherwise(F.lit(None))
)


_output = df.withColumn(
    "_UNCS",
    F.when(
        F.col("rnb") > 1, F.lag(F.col("_UNCS")).over(partition_by) - F.col("COUNCS")
    ).otherwise(F.col("_UNCS")),
)

我仅对 rnb 1 和 rnb 2 实现了理想的输出,之后 _uncs 变为 null。我怎样才能获得我想要的代码?请帮助我。

python pyspark azure-databricks
1个回答
0
投票

要实现您的场景,请尝试以下代码:

  • 在这里,我创建了具有负值的列,并将结果添加到 bac 以实现所需的输出
df = cost_srt.orderBy("coitm")
window_spec = Window.partitionBy("coitm").orderBy(F.desc("councs"))
df = df.withColumn("rnb", F.row_number().over(window_spec))
df.show()
df = df.withColumn("negatives", F.when(F.col("rnb") == 1, F.col("COUNCS")).otherwise(- df["COUNCS"]))
df.show()

result_df = df.withColumn("_UNCS", F.sum("negatives").over(window_spec))
result_df.show()

enter image description here

© www.soinside.com 2019 - 2024. All rights reserved.