`

[spark-src-core] 7.1 application in spark-PageRank

 
阅读更多

  below code path are all from sparks' example beside some comments are added by me.

 

val lines = ctx.textFile(args(0), 1)
    //-1 generate links of <src,targets> pair
    var links = lines.map{ s =>
      val parts = s.split("\\s+")
      (parts(0), parts(1)) //-pair of <src,target>
    }.distinct() //-needless if dedupliate
      .groupByKey().cache() //-raw:利用groupby生成一个准备join的表,模拟表数据实际情况; 由于links多次迭代所以要cache提升性能 #B
      //-leib.如果此行打开,上行也要同时打开否则redueByKey()异常,因为for()中flatMap()会产生(Char,Double)
//      .partitionBy(new org.apache.spark.HashPartitioner(2)).cache()

    //-2 generate ranks with default value,ie <spawnup-url,default-rank>
    //-use val if #A is comment
    var ranks = links.mapValues(v => 1.0) // ie <raw-links-key,1.0>

    //-3
    for (i <- 1 to iters) {
      //-3.1 reverse the spawnup urls to target urls:inner join;由于links是url全集可能性能影响大
      //- 交换links,ranks是否可以提升性能? no ,this is not leftJoin but inner join
      // ?links数量太大时,对于后续深迭代计算影响大,可以先利用contribs计算新的links(mapValues())再进行下一次join
      //-note:both links and ranks rdd are same partitioner,so no shuffle is necessary for join op
      val contribs = links.join(ranks).values.flatMap{ case (urls, rank) => //-why uses 'case' clause?元组tuple就要用
        val size = urls.size  //-target(to) urls size
        urls.map(url => (url, rank / size)) //-avg rank per target url
      }
      //-3.2 merge the contributed ranks per target url; 注意:此ranks不断收窄(慢慢远离出发urls),导致要计算的数据越来越少,see #A
      //-为什么不用恢复到原ranks节点数?若果恢复,统计数据将再恢复为第二次的数据
      ranks = contribs.reduceByKey(_ + _).mapValues(0.15 + 0.85 * _) //加权求和; retains same partittoner with join
      //-#A:若果数量确实庞大,可以使用此方法大约每隔几轮缓存下结果,这样在10轮以上的就快很多了? cmp #B
//      val oldlinks = links
//      links = links.join(ranks).map{ case (k,(urls, rank)) => (k,urls)} //-added by leib
//      oldlinks.unpersist(false)

      println("step------------------------------"+i+"---------------------------------")
      ranks.foreach(s => println("-result:" + s._1 + " - " + s._2))
    }

 

ref:

PageRank算法在spark上的简单实现

Spark PageRank

 

0
3
分享到:
评论

相关推荐

    spark-3.1.3-bin-without-hadoop.tgz

    最后,GraphX是Spark中的图计算框架,用于处理图形数据,支持常见的图算法,如PageRank和三角计数,并且能与其他Spark组件无缝集成。 总的来说,Spark-3.1.3-bin-without-hadoop.tgz是一个强大的大数据处理工具,它...

    spark-2.4.0-bin-hadoop2.7.tgz

    1. **Spark核心组件**:Spark Core是Spark的基础,提供了分布式任务调度、内存管理、错误恢复和网络通信等功能。它使得Spark可以在多台机器上高效地运行任务。 2. **Spark SQL**:Spark SQL是Spark用于结构化数据...

    spark-3.0.0-bin-without-hadoop.tgz

    Spark的核心组件包括Spark Core、Spark SQL、Spark Streaming、MLlib(机器学习库)和GraphX(图处理库)。 Spark Core是Spark的基础,提供了分布式任务调度和内存管理机制。它负责任务的分发、监控和故障恢复,...

    spark-2.3.0-bin-hadoop2.7版本.zip

    4. **组件丰富**:Spark包含多个模块,如Spark Core、Spark SQL、Spark Streaming、MLlib(机器学习库)和GraphX(图计算)。这些组件协同工作,覆盖了批处理、交互式查询、实时流处理、机器学习和图计算等多种应用...

    spark-2.4.0-bin-without-hadoop.tgz

    Spark Core 是 Spark 的基础,负责任务调度、内存管理、网络通信和存储接口。在 2.4.0 版本中,核心模块进行了性能调优,包括更快的 shuffle 操作和更好的资源调度。 GraphX 是 Spark 处理图形数据的模块,它提供了...

    spark1.6.0-src.rar

    这个压缩包"spark1.6.0-src.rar"包含了Spark 1.6.0的源代码,为开发者提供了深入理解Spark工作原理的机会,同时也允许用户根据自身需求进行定制化开发。 源码分析: 1. **Spark Core**:Spark的核心组件,负责任务...

    spark-in-action

    ### Spark in Action 知识点解析 #### 一、引言与背景介绍 - **Spark简介**:Apache Spark是一款开源的分布式计算系统,专为大规模数据处理设计。它支持多种编程语言(如Scala、Java、Python等),并以其高效、...

    Spark-Core学习知识笔记整理

    Spark-Core文档是本人经三年总结笔记汇总而来,对于自我学习Spark核心基础知识非常方便,资料中例举完善,内容丰富。具体目录如下: 目录 第一章 Spark简介与计算模型 3 1 What is Spark 3 2 Spark简介 3 3 Spark...

    Spark-Bench使用文档

    - **图形处理案例**:例如 PageRank、SVD++ 和三角计数(Triangle Count),这类案例侧重于图形数据结构的操作,可用于评估 Spark 处理复杂图形结构的能力。 - **SQL 查询案例**:Hive 和 RDDRelation 等案例关注于 ...

    learning-spark-examples-master

    Spark的主要组件包括Spark Core、Spark SQL、Spark Streaming、MLlib(机器学习库)和GraphX(图计算库)。Spark Core是基础,提供了分布式任务调度和数据存储功能;Spark SQL用于结构化数据处理,能与Hive等SQL系统...

    spark-2.0.0.tgz

    1. Spark Core:作为Spark的基础组件,Spark Core负责任务调度、内存管理、故障恢复和与存储系统的交互。在2.0.0版本中,对任务调度算法进行了优化,提高了任务分配的效率,使得整体运行速度更快。 2. Spark SQL:...

    spark-2.4.6-cdh5.16.2

    Spark是Apache软件基金会下的一个开源大数据处理框架,以其高效、灵活和易用性著称。在本主题中,我们关注的是Spark的特定版本——Spark 2.4.6与CDH(Cloudera Distribution Including Apache Hadoop)5.16.2的集成...

    Spark-strem 中文文档

    根据给定的文件信息,我们可以总结出以下关于“Spark-stream 中文文档”的相关知识点: ### Spark-stream 中文文档概述 **Spark-stream** 是Apache Spark框架的一部分,主要用于处理实时流数据。该文档为Spark-...

    spark-2.2.1.tar.gz 源码

    Spark的核心组件包括:Spark Core、Spark SQL、Spark Streaming、MLlib(机器学习库)和GraphX(图处理)。Spark Core是基础,提供分布式任务调度、内存管理、错误恢复和网络通信等功能。Spark SQL支持SQL查询和...

    Spark-2.4.5官网下载源码包

    1. `core/`:Spark的核心模块,包含任务调度、内存管理、I/O操作和分布式存储系统的接口等关键组件。 2. `sql/`:Spark SQL模块,提供SQL和DataFrame/Dataset API,支持Hive兼容性和多种数据源。 3. ` streaming/`:...

    基于Spark-Graphx的大规模用户图计算和应用 完整高清

    《基于Spark-Graphx的大规模用户图计算和应用》是一份深入探讨如何使用Apache Spark的GraphX组件进行大规模用户图计算的完整高清资料。Spark作为一个快速、通用且可扩展的数据处理框架,其GraphX模块为处理图形数据...

    apache-nutch-2.3.1-src.tar.gz

    1. **src**: 这是 Nutch 的源代码存放位置,分为多个子目录,如 `src/java` 存放 Java 代码,`src/test` 包含测试用例,`src/bin` 存放可执行脚本,`src/conf` 有配置文件等。 2. **build.xml**: Ant 构建文件,...

    spark-programming-guide(Spark 编程指南)-高清文字版

    ### Spark 编程指南知识点概览 #### 一、引言 - **快速上手**:本章节提供了关于如何开始使用Spark的快速介绍。通过交互式shell(支持Python和Scala),用户可以熟悉Spark的API。此外,还介绍了如何在Java、Scala和...

    Spark The Definitive Guide-201712

    5. **GraphX**:Spark的图处理库GraphX提供了一种用于处理图形数据的API,支持图的创建、操作和算法应用,如PageRank和社区检测。 6. **Spark Job调度**:了解如何使用Spark的调度器,如FIFO和FAIR调度策略,以及...

    spark-all.zip

    本资料集“spark-all.zip”包含了Spark的五个主要组件——Core、SQL、Streaming、GraphX以及调优和内核解析的相关内容,旨在为读者提供一个全面而深入的Spark学习平台,特别是结合了尚硅谷系列教程,让学习过程更加...

Global site tag (gtag.js) - Google Analytics