pyspark Window.partitionBy vs groupBy



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

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

现在,我可以使用一个简单的groupBy并对其进行agg(sum),但据我了解,这并不真正有效。groupBy将在分区之间移动大量数据。

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

但是我没有看到此窗口如何处理数据。是不是比这组比和总和好。还是一样?

据我所知,在使用 Spark DataFrame 时,groupBy操作是通过 Catalyst 优化的。DataFrames 上的groupBy与 RDD 上的groupBy不同。

例如,DataFrame 上的groupBy首先对分区执行聚合,然后对最终聚合阶段的聚合结果进行随机排序。因此,只有减少的聚合结果会被打乱,而不是整个数据。这类似于RDD上的reduceByKeyaggregateByKey。请参阅这篇相关的 SO 文章,并附上一个很好的例子。

此外,请参阅尹怀的演示文稿中的幻灯片 5,其中介绍了将数据帧与 Catalyst 结合使用的好处。

最后,我认为您在使用Spark数据帧时可以使用groupBy。使用Window对我来说似乎不适合您的要求。

相关内容

  • 没有找到相关文章

最新更新