Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/apache-spark/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Scala Apache Spark中的中间阶段,没有父阶段和子阶段_Scala_Apache Spark_Join_Rdd_Data Partitioning - Fatal编程技术网

Scala Apache Spark中的中间阶段,没有父阶段和子阶段

Scala 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,如下代码所述

我试图理解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
    ,如下代码所述
现在,对于使用know
HashPartitioner
的代码,有许多只使用一个task
partitionBy
创建的阶段,它们没有任何父阶段,也没有子阶段。这些阶段不与任何操作关联,只是在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