Python 在ApacheSpark中通过PySpark进行计算时,在数据帧上执行groupBy

Python 在ApacheSpark中通过PySpark进行计算时,在数据帧上执行groupBy,python,apache-spark,dataframe,pyspark,apache-spark-sql,Python,Apache Spark,Dataframe,Pyspark,Apache Spark Sql,我正在使用ApacheSpark,遇到了以下情况。我有一个名为“data”的Spark数据框,它的格式如下 Name Grade Count X A 10 Y A 8 X B 2 Y B 4 现在,在计算A级和B级之间的比率时,我想按“名称”对该数据帧进行分组。例如,对于“X”,它将是10/2=5 Name Ratio X 5 Y 4 PySpark 1.3.0版在时使用进行简单聚合应该可以正常工作: from

我正在使用ApacheSpark,遇到了以下情况。我有一个名为“data”的Spark数据框,它的格式如下

Name Grade Count
X     A     10
Y     A     8
X     B     2
Y     B     4
现在,在计算A级和B级之间的比率时,我想按“名称”对该数据帧进行分组。例如,对于“X”,它将是
10/2=5

Name Ratio
X     5
Y     4

PySpark 1.3.0版

在时使用
进行简单聚合应该可以正常工作:

from pyspark.sql.functions import col, sum, when

a_count = sum(when(col("grade") == "A", col("count")))
b_count = sum(when(col("grade") == "B", col("count")))

data.groupBy("name").agg((a_count / b_count).alias("ratio"))
或使用
加入

a = (data_agg.where(col("grade") == "A")
  .groupby("name")
  .agg(sum("count").alias("cnt"))
  .alias("a"))

b = (data_agg.where(col("grade") == "B")
  .groupby("name")
  .agg(sum("count").alias("cnt"))
  .alias("b"))


(a.join(b, col("a.name") == col("b.name"))
    .select(col("a.name"), (col("a.cnt") / col("b.cnt"))).alias("ratio"))

使用
进行简单聚合时
应该可以正常工作:

from pyspark.sql.functions import col, sum, when

a_count = sum(when(col("grade") == "A", col("count")))
b_count = sum(when(col("grade") == "B", col("count")))

data.groupBy("name").agg((a_count / b_count).alias("ratio"))
或使用
加入

a = (data_agg.where(col("grade") == "A")
  .groupby("name")
  .agg(sum("count").alias("cnt"))
  .alias("a"))

b = (data_agg.where(col("grade") == "B")
  .groupby("name")
  .agg(sum("count").alias("cnt"))
  .alias("b"))


(a.join(b, col("a.name") == col("b.name"))
    .select(col("a.name"), (col("a.cnt") / col("b.cnt"))).alias("ratio"))