使用来自其他两个列的信息并置两个 PySpark df 列

Juxtapose two PySpark df columns using information from two other columns

我的 PySpark 数据框中有四列:

'drivers','cars','topSpeeds','dates' 

假设每个 driver 在不同的日期用不同的车达到了不同的最高速度,并且不同的车在不同的日期用不同的 driver 达到了不同的最高速度。

我可以对所有日期的每辆车取 driver 的平均最高速度,如下所示:

df.groupBy("drivers").mean()

我认为这可以在不指定我按 topSpeed 取平均值的情况下工作,因为 topSpeed 是唯一具有数值的列。

同样,我可以获得所有日期每个driver的汽车最高速度的平均值:

df.groupBy("cars").mean()

现在,我想比较每个 driver 与每辆汽车在每个日期的平均值,所以我想要一个 table,其中 driver 是列和汽车是行,每个 table 条目是该特定汽车的 driver 的平均值。

你能想出一种在 PySpark 中实现这个 table 的方法吗?

就这样做

import pyspark.sql.functions as F

df_gb = df.groupBy('drivers', 'cars').agg(F.mean('topSpeeds').alias('avg_topSpeeds'))

df_out = df_gb.groupBy('cars').pivot('drivers').agg(F.max('avg_topSpeeds'))