微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

pyspark中aggregate(0, lambda,lambda)的用法

如何解决pyspark中aggregate(0, lambda,lambda)的用法

一个pyspark代码

seqOp = (lambda x,y: x+y)
sum_temp = df.rdd.map(lambda x: len(x.timestamp)).aggregate(0,seqOp,seqOp)

sum_temp 的输出一个数值。但我不清楚 aggregate(0,seqOp) 是如何工作的。在我看来,通常情况下,aggregate 只使用一个单一的函数形式,如 "avg"

此外,df.rdd.map(lambda x: len(x.timestamp)) 的类型为 pyspark.rdd.PipelinedRDD。我们如何获取它的内容

解决方法

根据docs,聚合过程:

  1. 从作为零值 (0) 的第一个参数开始,
  2. 然后使用第二个参数聚合 RDD 的每个分区,并且
  3. 最后,使用第三个参数将聚合的分区组合成最终结果。在这里,您对每个分区求和,然后将每个分区的总和求和为最终结果。

您可能将此聚合与数据帧的聚合方法混淆了。 RDD 是低级对象,这里不能使用数据帧聚合方法,例如 avg/mean/etc。

要获取 RDD 的内容,您可以执行 rdd.take(1) 来检查随机元素,或者使用 rdd.collect() 来检查整个 RDD(请注意,这会将所有数据收集到驱动程序上,并且可以如果 RDD 很大会导致内存错误)。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。