如何在PySpark中提高此分组依据和聚合的性能?

时间:2019-06-29 15:57:13

标签: python apache-spark pyspark

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

这是我的代码,用于在数据帧上执行分组和汇总:

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的初学者,所以请保持温柔:-)

0 个答案:

没有答案