使用Scala和Spark编写WordCount和PageRank

实验内容

本博客为云计算课程的一个实验记录。

本实验的主要内容包括以下两项:
1、学习在linux上安装和配置Scala和Spark

2、学习使用spark和scala编写WordCount和PageRank程序

实验环境

scala2.10.7,spark1.6

实验过程

1、安装和配置Scala和Spark

这个比较简单,不多赘述了。不过要注意Scala和Spark的兼容问题,在编程过程中出现过版本不兼容导致编译失败的问题。

2、WordCount

理解wordcount的流程【精选】hadoop 之 wordCount流程详解_hadoop wordcount详解_普通网友的博客-CSDN博客(1)新建文件

(2)编写WordCount程序

import org.apache.spark.rdd.RDD
import org.apache.spark.{SparkConf, SparkContext}

object WordCount {
       def main(args: Array[String]) {
         //创建SparkConf
           val conf: SparkConf = new SparkConf()
         //创建SparkContext
           val sc: SparkContext = new SparkContext(conf)
         //从文件中读取数据
           val lines: RDD[String] = sc.textFile(args(0))
         //按空格切分单词
           val words: RDD[String] = lines.flatMap(_.split(" "))
         //单词计数,单词每出现一次就计数为1
           val wordAndOne: RDD[(String, Int)] = words.map((_, 1))
         //聚合,统计每个单词出现的次数
           val result: RDD[(String, Int)] = wordAndOne.reduceByKey(_+_)
         //排序,按照单词出现的次数排序
           val finalResult: RDD[(String, Int)] = result.sortBy(_._2, false)
         //将统计结构保存到文件
           finalResult.saveAsTextFile(args(1))
         //释放资源
           sc.stop()
        }
}

(3)编译

此处$SPARK_HOME已经在~/.bash_profile中配置,如下:

(4)打包成jar包

echo Main-class: WordCount > manifest.txt
jar cvfm WordCount.jar manifest.txt *

(5)提交运行

输入文件为word.txt,输出文件为result.txt,注意这里的result.txt是个目录(命名的时候,不是很懂)

(6)查看输出

3、PageRank

PageRank原理:PageRank的原理和实现_pagerank算法原理_路__的博客-CSDN博客

(1)创建文件

(2)编写代码

import org.apache.spark.{SparkConf, SparkContext}

object PageRank {
       def main(args: Array[String]): Unit = {
       val conf = new SparkConf().setAppName("pagerank").setMaster("local")
       val sc = new SparkContext(conf)
       val links = sc.parallelize(List(
       ("A",List("B", "C")),
       ("B",List("A","C")),
       ("C",List("A","B","C")),
       ("D",List("C"))
       )).persist()
       var ranks = links.mapValues(v => 1.0)
       val output = "hdfs://Namenode:9000//output"
       for (i <- 0 until 10) {
       val contributions = links.join(ranks).flatMap {
       case (pageId, (tolinks, rank)) =>
       tolinks.map(tolink => (tolink, rank / tolinks.size))
       }
       ranks = contributions.reduceByKey((x,y) => x + y).mapValues(v => 0.15 + 0.85*v)
}
ranks.saveAsTextFile(output)
}
}

(3)编译、打包成jar包、提交运行、查看输出

与上述wordCount的类似,不再赘述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值