gpt4 book ai didi

python - pyspark Window.partitionBy 与 groupBy

转载 作者:太空狗 更新时间:2023-10-29 20:57:43 26 4
gpt4 key购买 nike

假设我有一个包含大约 21 亿条记录的数据集。

这是一个包含客户信息的数据集,我想知道他们做了多少次。所以我应该对 ID 进行分组并对一列求和(它有 0 和 1 值,其中 1 表示一个 Action )。

现在,我可以使用一个简单的 groupByagg(sum) 它,但据我所知,这并不是很有效。 groupBy 将在分区之间移动大量数据。

或者,我也可以使用带有 partitionBy 子句的 Window 函数,然后对数据求和。缺点之一是我必须应用额外的过滤器,因为它会保留所有数据。我想要每个 ID 一条记录。

但是我看不到这个窗口是如何处理数据的。是不是比这个 groupBy 和 sum.还是一样?

最佳答案

据我所知,在使用 spark DataFrames 时,groupBy 操作通过 Catalyst 进行了优化. DataFrames 上的 groupBy 与 RDD 上的 groupBy 不同。

例如,DataFrames 上的groupBy 首先对分区进行聚合,然后将聚合结果打乱以进行最后的聚合阶段。因此,只有减少的聚合结果会被打乱,而不是整个数据。这类似于 RDD 上的 reduceByKeyaggregateByKey。看到这个相关SO-article有一个很好的例子。

此外,请参阅此 presentation 中的幻灯片 5 Yin Huai 介绍了将 DataFrames 与 Catalyst 结合使用的好处。

最后,我认为您在使用 spark DataFrames 时可以很好地使用 groupBy。使用 Window 似乎不适合我的要求。

关于python - pyspark Window.partitionBy 与 groupBy,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47174686/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com