Graphx入门之简单pagerank

本文介绍了如何在Spark环境下使用GraphX实现PageRank算法。首先通过`spark-shell`进行本地测试,然后详细讲解了如何将Scala代码打包成JAR并提交到Spark集群运行。在代码部分展示了构建图、计算PageRank的步骤,以及运行结果。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

需求:有两份数据集,一份是边,一份是点。求点的PageRank
格式:
边:sourceID destID
点:name sourceID

spark-shell

spark shell属于最简单入门的local版本。建图有很多的方式,如将边的集合转换为图,或者是直接将数据导出为图。我们使用最简单的导出为图
- 代码如下

import org.apache.spark.graphx._

#用绝对路径来进行取数据,或者是HDFS的路径
val graph = GraphLoader.edgeListFile(sc,'file:///xx/yy/aa/dd/a.txt')
#查看数据是否导入成功
graph.vertices.take(10)
val pr = graph.pageRank(0.0001).vertices
pr.take(10)

  • 最开始自己定义的sc,结果就出错了。
//val sparkConf = new SparkConf().setAppName("GraphFromFile")
//val sc = new SparkContext(sparkConf)

spart-submit到集群

直接将spark-shell中的命令放到scala文件中是不可行的,需要做这几方面的工作

语法

  • 定义package,在第一行里面
  • import需要的包
  • 定义Object.scala里面的语法规定

Scala必须编译成JAR文件才能提交

  • sbt工具进行编译链接。

代码贴一下

package com.baidu.dcs.spark.graphx.graph

import org.apache.spark.SparkConf
import org.apache.spark.SparkContext
import org.apache.spark.graphx.GraphLoader
import scala.util.MurmurHash
import org.apache.spark.graphx.Graph
import org.apache.spark.rdd.RDD
import org.apache.spark.graphx.VertexId

object GraphX{
  def main(args: Array[String]): Unit = {
    SparkConf().setAppName("GraphFromFile").setMaster("yarn-cluster")
    val sparkConf = new SparkConf()
    val sc = new SparkContext(sparkConf)
    val graph = GraphLoader.edgeListFile(sc ,"hdfs://06.graph",true)

    val domains = sc.textFile("hdfs:/06.dict").map {line => val
        f = line.split("\t")
        (f(1).toLong, f(0))
    }

    val pr = graph.pageRank(0.0001).vertices

    val domain_pr = domains.join(pr).map{ case (id, (domain_name, rank)) => (domain_name, rank) }
    println(domain_pr.collect().mkString("\n"))


  }

结果

a,9.497575456491505
b,8.469759790256541
c,6.940365594306384
d,6.488258790438499
e,6.385893206335569
f,5.283553101069759
g,5.097438488331897
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值