Просто используйте функцию agg
, чтобы применить множество функций к groupBy
import pyspark.sql.functions as f
from pyspark.shell import spark
df = spark.createDataFrame([['2017-03-01', 'A', 1, 1],
['2017-04-01', 'B', 2, 3],
['2017-05-01', 'B', 3, 4],
['2017-06-01', 'A', 5, 5]], schema=['pdate', 'url', 'weight', 'imp'])
df = df \
.groupBy(f.col('url')) \
.agg(f.min('pdate').alias('min_pdate'),
f.max('pdate').alias('max_pdate'),
f.sum('imp').alias('sum_imp'),
(f.sum(f.col('imp') * f.col('weight')) / f.sum(f.col('weight'))).alias('wmean_imp'))
df.show()
Выход:
+---+----------+----------+-------+-----------------+
|url| min_pdate| max_pdate|sum_imp| wmean_imp|
+---+----------+----------+-------+-----------------+
| B|2017-04-01|2017-05-01| 7| 3.6|
| A|2017-03-01|2017-06-01| 6|4.333333333333333|
+---+----------+----------+-------+-----------------+