Ant*_*der 9 python apache-spark apache-spark-sql pyspark
假设我有一个大约21亿条记录的数据集.
这是一个包含客户信息的数据集,我想知道他们做了多少次.所以我应该对ID进行分组并对一列进行求和(它有0和1值,其中1表示动作).
现在,我可以用一个简单的groupBy与agg(sum)它,但我的理解这是不是真的有效.这groupBy将在分区之间移动大量数据.
或者,我也可以使用带有partitionBy子句的Window函数,然后对数据求和.其中一个缺点是我必须应用额外的过滤器,因为它会保留所有数据.我想要每个ID一个记录.
但我没有看到这个窗口如何处理数据.它比这个组还要好吗和总和.还是一样吗?
据我所知,在使用spark DataFrames时,groupBy操作通过Catalyst进行优化.在groupBy上DataFrames是不像groupBy上RDDS.
例如,groupByon DataFrames首先在分区上执行聚合,然后对最终聚合阶段的聚合结果进行混洗.因此,只有减少的聚合结果才会被洗牌,而不是整个数据.这与RDD 类似reduceByKey或aggregateByKey在RDD上类似.有一个很好的例子,请参阅这篇相关的SO文章.
此外,请参阅Yin Huai 在本演示文稿中的幻灯片5,其中介绍了将DataFrames与Catalyst结合使用的好处.
最后,我认为你groupBy在使用spark DataFrames时很好用.根据Window您的要求,使用对我来说似乎不合适.
| 归档时间: |
|
| 查看次数: |
3559 次 |
| 最近记录: |