使用来自其他两个列的信息并置两个 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'))
我的 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'))