我有一个看起来像这样的数据帧:
ID | 日期 | 年龄权重 | 作业 | 是否|||
---|---|---|---|---|---|---|
1 | 202101 | 20-3 | 4 | 管道工1 | ||
2 | 202101 | 30-40 | 5 | 油漆工 | 0
方法1
您可以通过创建数据帧df
的临时视图来使用spark-sql
df.createOrReplaceTempView('my_data')
然后运行以下sql查询
results_df = sparkSession.sql("""
SELECT
Date,
agecat,
weightcat,
JOB,
SUM(YesNo)/COUNT(YesNo) as my_metric
FROM
my_data
GROUP BY
Date,
agecat,
weightcat,
JOB
""")
或
方法2
使用pyspark-api
from pyspark.sql import functions as F
results_df = df.groupBy(
F.col("Date"),
F.col("agecat"),
F.col("weightcat"),
F.col("JOB"),
).agg(
F.lit(F.sum("YesNO")/F.count("YesNO")).alias("my_metric")
)
输出
results_df.show()
+------+------+---------+-------+---------+
| Date|agecat|weightcat| JOB|my_metric|
+------+------+---------+-------+---------+
|202101| 20-30| 4|plumber| 1.0|
|202101| 30-40| 5|painter| 0.0|
+------+------+---------+-------+---------+