Scala Apache Spark中的中间阶段,没有父阶段和子阶段
我试图理解ApacheSparkScala Apache Spark中的中间阶段,没有父阶段和子阶段,scala,apache-spark,join,rdd,data-partitioning,Scala,Apache Spark,Join,Rdd,Data Partitioning,我试图理解ApacheSpark(v2.2.3)中已知分区器的好处,为此我编写了PageRank算法的简单实现,下面是链接示例代码-https://github.com/apache/spark/blob/master/examples/src/main/python/pagerank.py linksRDD的类型为RDD[(String,Iterable[String])] ranksRDD的类型为RDD[(字符串,双精度)] 我使用了一个已知的HashPartitioner,如下代码所述
(v2.2.3)
中已知分区器的好处,为此我编写了PageRank算法的简单实现,下面是链接示例代码-https://github.com/apache/spark/blob/master/examples/src/main/python/pagerank.py
的类型为linksRDD
RDD[(String,Iterable[String])]
的类型为ranksRDD
RDD[(字符串,双精度)]
- 我使用了一个已知的
,如下代码所述HashPartitioner
HashPartitioner
的代码,有许多只使用一个taskpartitionBy
创建的阶段,它们没有任何父阶段,也没有子阶段。这些阶段不与任何操作关联,只是在DAG之间浮动
- 我已经圈出了没有任何依赖性的阶段-
val hashParts = new HashPartitioner(partitions = 10)
val partLinks = linksRDD.partitionBy(hashParts)
var rankUpdates = ranksRDD
for (_ <- 0 until numOfIters) {
val contributions = links
.join(rankUpdates)
.flatMap({
case (_, (outLinks, rank)) =>
val numOfOutLinks = outLinks.size
outLinks.map(x => (x, rank / numOfOutLinks))
})
rankUpdates = contributions
.reduceByKey(_ + _)
.mapValues(_ * 0.85 + 0.15)
}
rankUpdates.saveAsObjectFile("SOME_PATH") //ACTION TO TRIGGER THE COMPUTATION.
// NO PARTITIONER OBJECT IS PROVIDED/MENTIONED
val partLinks = linksRDD
val partRanks = ranksRDD