使用 pyspark 从数据框列进行平均计算

Mean calculation from dataframe columns with pyspark

我正在寻找如何在不从 spark df 转换为 pandas df:

的情况下进行以下计算的解决方案

mean = sum(df[A]*df[B])/sum(df[B])

基于 spark 数据框中选定列的计算可以通过将其拆分成多个部分来完成,例如: new_col = df[A]*df[B]
new_col = sum(new_col)
new_col2 = sum(df[B])
mean = new_col/new_col2 但我希望有更复杂的方法来做到这一点。也许通过使用 spark .withColumn 函数?

您可以使用产品创建一个新列,然后聚合:

from pyspark.sql import functions as F

df = spark.createDataFrame(data=[[1, 2, 3], [1, 2, 3], [1, 2, 3]], schema=["A", "B", "C"])

mean = (
    df
    .withColumn("AB", F.col("A") * F.col("B"))
    .groupBy()
    .agg(F.mean("AB").alias("AB"), F.mean("B").alias("B"))
    .withColumn("mean", F.col("AB") / F.col("B"))
)

mean.show()