Hoo*_* M. 5 partitioning apache-spark
这是来自jaceklaskowski.gitbooks.io的报价。
某些操作(例如地图,flatMap,过滤器)不保留分区。map,flatMap,过滤器操作将一个函数应用于每个分区。
我不明白为什么过滤器不能保留分区。它只是获得满足条件的每个分区的子集,因此我认为可以保留分区。为什么不那样呢?
你当然是对的。报价是不正确的。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
Run Code Online (Sandbox Code Playgroud)
这与map不保留分区 ( Partitioner) 之类的操作形成对比:
rdd.map(identity _).partitioner
// Option[org.apache.spark.Partitioner] = None
Run Code Online (Sandbox Code Playgroud)
Datasets 有点微妙,因为过滤器通常是下推的,但总体行为是相似的。
| 归档时间: |
|
| 查看次数: |
706 次 |
| 最近记录: |