使用其他两个列中的信息将两个PySpark df列并置

时间:2019-02-20 13:04:57

标签: python datatable pyspark pyspark-sql

我的PySpark数据框中有四列:

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

假设每个驾驶员在不同日期使用不同的汽车达到不同的最高速度,并且不同汽车在不同日期使用不同的驾驶员获得不同的最高速度。

我可以得出所有日期中每辆车的驾驶员最高时速的平均值:

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

我认为这种方法无需指定我按topSpeed进行平均,因为topSpeed是唯一具有数值的列。

类似地,我可以得到每个日期的每个驾驶员的最高车速的平均值:

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

现在,我想比较每个日期的每个驾驶员与每个汽车的平均值,因此我想要一个表,其中驾驶员是列,汽车是行,每个表项是该驾驶员的平均值,那辆特定的汽车。

您能想到一种在PySpark中制作这张桌子的方法吗?

1 个答案:

答案 0 :(得分:0)

只需这样做

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'))