首页 > 解决方案 > 如何将一列除以pyspark中的其他几个子列?

问题描述

我需要将以下 python 代码转换为 pyspark。

df['GRN_ratio'] = df['GRN Quantity']/ df.groupby(['File No','Delivery Note Number'])['GRN 
                  Quantity'].transform(sum)

为此,我正在使用以下 Pyspark 代码。但我没有得到预期的输出。

df.groupby(['File No','Delivery Note Number']).agg(F.sum('GRN Quantity').alias('GRN_Sum')))
           .withColumn("GRN_ratio", F.col("GRN Quantity")/F.col("GRN_Sum"))

标签: pythonapache-sparkpysparkgroup-byaggregate-functions

解决方案


您可以使用窗口函数而不是 group by:

from pyspark.sql import functions as F, Window

df2 = df.withColumn('GRN_ratio',
    F.col('GRN Quantity') / 
    F.sum('GRN Quantity').over(Window.partitionBy('File No','Delivery Note Number'))
)

推荐阅读