通过 PySpark 在 Apache Spark 中进行计算时对数据框执行 groupBy
Perform a groupBy on a dataframe while doing a computation in Apache Spark through PySpark
我在玩Apache spark,遇到了以下情况。我有一个名为 'data' 的 Spark 数据框,它看起来像这种格式
Name Grade Count
X A 10
Y A 8
X B 2
Y B 4
现在,我想在计算 A 级和 B 级之间的比率时将此数据框按 'Name' 分组。例如 'X',它将是 10/2=5
。
Name Ratio
X 5
Y 4
PySpark 版本 1.3.0
使用 when
的简单聚合应该可以正常工作:
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"))
或 join
:
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"))
我在玩Apache spark,遇到了以下情况。我有一个名为 'data' 的 Spark 数据框,它看起来像这种格式
Name Grade Count
X A 10
Y A 8
X B 2
Y B 4
现在,我想在计算 A 级和 B 级之间的比率时将此数据框按 'Name' 分组。例如 'X',它将是 10/2=5
。
Name Ratio
X 5
Y 4
PySpark 版本 1.3.0
使用 when
的简单聚合应该可以正常工作:
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"))
或 join
:
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"))