python - 如何在 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 的初学者,所以请温柔:-)
解决方案
推荐阅读
- javascript - 在反应类中的方法之前使用 get 的好处
- java - 无法在 Testcontainers 中使用 Chrome 驱动程序打开任何带有 Selenium 的 URL
- c# - 如何将 Where 和 Or 语句动态添加到 Linq 查询
- wmi - 对 Win32_DiskDrive 类使用非管理员用户时,WMI 会出现一般故障
- python - 如何添加片尾画面?
- dll - 是否必须为每个位版本编译和注册 COM DLL?
- spring-boot - N1ql 查询通过 couchbase 数据库中的两个字段进行过滤
- android - kotlin 中的替代方法是什么(当我在 android java 中使用 new 时自动完成)
- node.js - 如何使用 ejs 访问对象内部的数据?
- python - 有没有办法在python中给定导入名称来获取包名称?