首页 > 解决方案 > 如何在 PySpark 中提高此 groupby 和聚合的性能?

问题描述

我正在尝试将数据帧转换为 RDD,然后对其执行聚合操作(键 =(AccountKey,x)。聚合键 1 的最大值,键 2 的最大值,键 3 的最大值)。但不幸的是,我觉得我仍然不明白如何实现它。我可以在数据帧上执行此操作,但由于改组,性能很差(我尝试重新分区,但没有帮助)。如何从性能方面进行改进?

这是我在数据帧上执行 groupby 和聚合的代码:

def operation_xy(df):
    # Groupby Account and x
    groupByExpr = ['Account', 'x']
    exprs = [F.max(F.col(c)) for c in ['1', '2', '3']]

    return df.groupBy(groupByExpr).agg(*exprs)

这是我的输入:

[Row(AccountKey='5878', x=32.0, 1=False, 2=False, 3=False)]
[Row(AccountKey='5178', x=24.0, 1=False, 2=False, 3=True)]
[Row(AccountKey='5178', x=24.0, 1=False, 2=True, 3=False)]
[Row(AccountKey='5178', x=32.0, 1=False, 2=False, 3=False)]
[Row(AccountKey='5878', x=32.0, 1=True, 2=False, 3=True)]

预期输出:

[Row(AccountKey='5878', x=32.0, 1=True, 2=False, 3=True)]
[Row(AccountKey='5178', x=24.0, 1=False, 2=True, 3=True)]
[Row(AccountKey='5178', x=32.0, 1=False, 2=True, 3=False)]

我是 Spark 的初学者,所以请温柔:-)

标签: pythonapache-sparkpyspark

解决方案


推荐阅读