gpt4 book ai didi

apache-spark - 为什么过滤器不保留分区?

转载 作者:行者123 更新时间:2023-12-04 14:22:51 24 4
gpt4 key购买 nike

这是引自 jaceklaskowski.gitbooks.io .

Some operations, e.g. map, flatMap, filter, don’t preserve partitioning. map, flatMap, filter operations apply a function to every partition.



我不明白为什么过滤器不保留分区。它只是获取满足条件的每个分区的子集,因此我认为可以保留分区。为什么不是那样?

最佳答案

你当然是对的。报价是不正确的。 filter确实保留了分区(出于您已经描述的原因),并且很容易确认

val rdd = sc.range(0, 10).map(x => (x % 3, None)).partitionBy(
new org.apache.spark.HashPartitioner(11)
)

rdd.partitioner
// Option[org.apache.spark.Partitioner] = Some(org.apache.spark.HashPartitioner@b)

val filteredRDD = rdd.filter(_._1 == 3)
filteredRDD.partitioner
// Option[org.apache.spark.Partitioner] = Some(org.apache.spark.HashPartitioner@b)

rdd.partitioner == filteredRDD.partitioner
// Boolean = true

这与 map 等操作形成对比。 ,不保留分区( Partitioner ):

rdd.map(identity _).partitioner
// Option[org.apache.spark.Partitioner] = None
Datasets有点微妙,因为过滤器通常是下推的,但总体行为是相似的。

关于apache-spark - 为什么过滤器不保留分区?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50288483/

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