使用 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()
我正在寻找如何在不从 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()