大数据基础编程、实验和教程案例(实验七)

这篇具有很好参考价值的文章主要介绍了大数据基础编程、实验和教程案例(实验七)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

你好# 大数据基础编程、实验和教程案例(实验七)

14.5 实验五:MapReduce 初级编程实践

本实验对应第 9 章的内容。

14.7.1 实验目的

(1)掌握使用 Spark 访问本地文件和 HDFS 文件的方法
(2)掌握 Spark 应用程序的编写、编译和运行方法

14.7.2 实验平台

操作系统 Linux
Hadoop版本 3.1.3
Spark 版本 2.4.0

14.7.3 实验步骤

1.Spark读取文件系统的数据

(1)在 spark-shell 中读取 Linux 系统本地文件“/home/hadoop/test.txt”,然后统计出文件的行数;

 cd /usr/local/spark
./bin/spark-shell

scala>val textFile=sc.textFile("file:///home/hadoop/test.txt")
scala>textFile.count()

在spark-shell中读取linux系统本地文件“/home/hadoop/test.txt”,然后统计出文件,大数据,mapreduce,hadoop
(2)在 spark-shell 中读取 HDFS 系统文件“/user/hadoop/test.txt”(如果该文件不存在,请先创建),然后,统计出文件的行数;

scala>val textFile=sc.textFile("hdfs://localhost:9000/user/hadoop/test.txt")
scala>textFile.count()

在spark-shell中读取linux系统本地文件“/home/hadoop/test.txt”,然后统计出文件,大数据,mapreduce,hadoop
(3)编写独立应用程序(推荐使用 Scala 语言),读取 HDFS 系统文件“/user/hadoop/test.txt”(如果该文件不存在,请先创建),然后,统计出文件的行数;通过 sbt 工具将整个应用程序编译打包成 JAR 包,并将生成的 JAR 包通过 spark-submit 提交到 Spark 中运行命令。
使用 hadoop 用户名登录 Linux 系统,打开一个终端,在 Linux 终端中,执行如下命令创建一个文件夹 sparkapp 作为应用程序根目录:

cd ~ 
mkdir ./sparkapp 
mkdir -p ./sparkapp/src/main/scala 

需要注意的是,为了能够使用 sbt 对 Scala 应用程序进行编译打包,需要把应用程序代码存放在应用程序根目录下的“src/main/scala” 目录下。下面使用 vim 编辑器在“~/sparkapp/src/main/scala”下建立一个名为 SimpleApp.scala 的 Scala 代码文件,命令如下:

cd ~
vim ./sparkapp/src/main/scala/SimpleApp.scala

然后,在 SimpleApp.scala 代码文件中输入以下代码:

/* SimpleApp.scala */
import org.apache.spark.SparkContext
import org.apache.spark.SparkContext._
import org.apache.spark.SparkConf
object SimpleApp {
 def main(args: Array[String]) {
 val logFile = " hdfs://localhost:9000/user/hadoop/test.txt"
 val conf = new SparkConf().setAppName("Simple Application")
 val sc = new SparkContext(conf)
 val logData = sc.textFile(logFile, 2)
 val num = logData.count()
 printf("The num of this file is %d", num)
 }
}

下面使用 sbt 对 Scala 程序进行编译打包。
SimpleApp.scala 程序依赖于 Spark API,因此,需要通过 sbt 进行编译打包以后才能运行。 首先,需要使用 vim 编辑器在“~/sparkapp”目录下新建文件 simple.sbt,命令如下:

cd ~
vim ./sparkapp/simple.sbt

simple.sbt 文件用于声明该独立应用程序的信息以及与 Spark 的依赖关系(实际上,只要扩展名使用.sbt,文件名可以不用 simple,可以自己随意命名,比如 mysimple.sbt)。需要在 simple.sbt 文件中输入以下内容:

name := "Simple Project"
version := "1.0"
scalaVersion := "2.11.12"
libraryDependencies += "org.apache.spark" %% "spark-core" % "2.4.0"

为了保证 sbt 能够正常运行,先执行如下命令检查整个应用程序的文件结构:

cd ~/sparkapp
find .

在spark-shell中读取linux系统本地文件“/home/hadoop/test.txt”,然后统计出文件,大数据,mapreduce,hadoop
执行结果
在spark-shell中读取linux系统本地文件“/home/hadoop/test.txt”,然后统计出文件,大数据,mapreduce,hadoop
生成的 JAR 包的位置为“~/sparkapp/target/scala-2.11/simple-project_2.11-1.0.jar”。对于前面 sbt 打包得到的应用程序 JAR 包,可以通过 spark-submit 提交到 Spark 中运行
在spark-shell中读取linux系统本地文件“/home/hadoop/test.txt”,然后统计出文件,大数据,mapreduce,hadoop

2.对于两个输入文件 A 和 B,编写 Spark 独立应用程序(推荐使用 Scala 语言),对两个文件进行合并,并剔除其中重复的内容,得到一个新文件 C。

下面是输入文件和输出文件的一个样例,供参考。
输入文件 A 的样例如下:

20170101 x
20170102 y
20170103 x
20170104 y
20170105 z
20170106 z

输入文件 B 的样例如下:

20170101 y
20170102 y
20170103 x
20170104 z
20170105 y

根据输入的文件 A 和 B 合并得到的输出文件 C 的样例如下:

20170101 x
20170101 y
20170102 y
20170103 x
20170104 y
20170104 z
20170105 y
20170105 z
20170106 z

(1)假设当前目录为/usr/local/spark/mycode/remdup,在当前目录下新建一个目录 mkdir -p src/main/scala,然后在目录/usr/local/spark/mycode/remdup/src/main/scala 下新建一个remdup.scala,复制下面代码

import org.apache.spark.SparkContext
import org.apache.spark.SparkContext._
import org.apache.spark.SparkConf
import org.apache.spark.HashPartitioner
 
object RemDup {
    def main(args: Array[String]) {
        val conf = new SparkConf().setAppName("RemDup")
        val sc = new SparkContext(conf)
        val dataFile = "file:///home/charles/data"
        val data = sc.textFile(dataFile,2)
        val res = data.filter(_.trim().length>0).map(line=>(line.trim,"")).partitionBy(new HashPartitioner(1)).groupByKey().sortByKey().keys
        res.saveAsTextFile("result")
    }
}

(2)在目录/usr/local/spark/mycode/remdup 目录下新建 simple.sbt,复制下面代码:

name := "Simple Project"
version := "1.0"
scalaVersion := "2.11.12"
libraryDependencies += "org.apache.spark" %% "spark-core" % "2.4.0"

(3)在目录/usr/local/spark/mycode/remdup 下执行下面命令打包程序

sudo /usr/local/sbt/sbt package

(4)最后在目录/usr/local/spark/mycode/remdup 下执行下面命令提交程序

/usr/local/spark/bin/spark-submit --class "RemDup"  /usr/local/spark/mycode/remdup/target/scala-2.11/simple-project_2.11-1.0.jar

查看结果
在spark-shell中读取linux系统本地文件“/home/hadoop/test.txt”,然后统计出文件,大数据,mapreduce,hadoop

在spark-shell中读取linux系统本地文件“/home/hadoop/test.txt”,然后统计出文件,大数据,mapreduce,hadoop

3.编写独立应用程序实现求平均值问题

每个输入文件表示班级学生某个学科的成绩,每行内容由两个字段组成,第一个是学生名字,第二个是学生的成绩;编写 Spark 独立应用程序求出所有学生的平均成绩,并输出到一个新文件中。
Algorithm成绩的样例如下:

小明 92
小红 87
小新 82
小丽 90

Database成绩的样例如下:

小明 95
小红 81
小新 89
小丽 85

Python成绩的样例如下:

小明 83
小红 82
小新 94
小丽 91

平均成绩的样例如下:

小明 89.67
小红 83.67
小新 88.33
小丽 88.67

准备工作
1.进入到mycode目录,新建RemDup目录(没有mycode目录可以新建一个)
再进入到RemDup目录中去
在spark-shell中读取linux系统本地文件“/home/hadoop/test.txt”,然后统计出文件,大数据,mapreduce,hadoop

2.新建datas目录,写入文件algorithm、database、python:
在spark-shell中读取linux系统本地文件“/home/hadoop/test.txt”,然后统计出文件,大数据,mapreduce,hadoop
写入文件:
在spark-shell中读取linux系统本地文件“/home/hadoop/test.txt”,然后统计出文件,大数据,mapreduce,hadoop
Algorithm

小明 92
小红 87
小新 82
小丽 90

Database

小明 95
小红 81
小新 89
小丽 85

Python

小明 82
小红 83
小新 94
小丽 91

题目
书上是 avgscore ->AvgScore

(1)假设当前目录为/usr/local/spark/mycode/AvgScore,在当前目录下新建一个目录src/main/scala,然后在目 录/usr/local/spark/mycode/AvgScore/src/main/scala 下新建一个AvgScore.scala。复制如下代码:
在spark-shell中读取linux系统本地文件“/home/hadoop/test.txt”,然后统计出文件,大数据,mapreduce,hadoop

//实际运行代码
//导入必要的 Spark 库:
import org.apache.spark.SparkContext
import org.apache.spark.SparkContext._
import org.apache.spark.SparkConf
import org.apache.spark.HashPartitioner

//定义应用程序对象和入口点:
object AvgScore {
    def main(args: Array[String]) {

//设置 Spark 应用程序的配置:
        val conf = new SparkConf().setAppName("AvgScore")
        val sc = new SparkContext(conf)

//定义数据文件的路径并加载数据:
        val dataFile = "file:///usr/local/spark/mycode/AvgScore/datas"

/*
    这里使用 sc.textFile() 方法加载一个文本文件,
            3 参数指定每个分区包含的行数。
*/
        val data = sc.textFile(dataFile,3)

//定义一个计算平均分的函数,并应用到数据集上:
        val res = data

    //filter() 方法通过 trim() 函数过滤空行
    .filter(_.trim().length > 0)

    /*
    map() 方法转换数据集,每行数据被转换成一个元组,包含学生姓名和成绩。
    split() 方法用于将行拆分为数组
    trim() 方法用于去除多余的空格,并将成绩转换为整数。
    */
    .map(line => (line.split(" ")(0).trim(), line.split(" ")(1).trim().toInt))

    //partitionBy() 方法将结果分区。
    .partitionBy(new HashPartitioner(1))

    //groupByKey() 方法将数据集按键(学生姓名)分组。
    .groupByKey()

    /*map() 方法遍历分组,计算平均成绩,并格式化为两位小数。
    函数返回一个新的元组,包含学生姓名和平均成绩。*/

	/*
	下面这段代码是针对一个键值对RDD进行操作,其中每个键对应一个浮点数数组。
	代码中的.map()函数将每个键值对映射为一个新的键值对,
	其中新的值是原始数组的平均值(保留两位小数)。
	首先定义了一个变量n和一个变量sum,分别用于计算数组元素的数量和总和。
	然后,使用for循环遍历数组中的每个元素,将其加入sum中,并将n加1。
	接下来,计算平均值avg,并使用f"$avg%1.2f"格式化为保留两位小数的字符串,
	最后将键值对的值更新为这个字符串转换为Double类型的结果。
	最终,代码返回一个新的键值对,其中键与原始RDD中的键相同,
	而值则为该键对应的数组的平均值(保留两位小数)。
	*/
    .map(x => {
        var n = 0
        var sum = 0.0
        for (i <- x._2) {
            sum = sum + i
            n = n + 1
        }
        val avg = sum / n
        val format = f"$avg%1.2f".toDouble
        (x._1, format)
    })

    /*
    将结果保存到输出文件:
    这里使用 saveAsTextFile() 方法将结果保存到一个文本文件。
    Spark 会自动将数据保存在多个分区中。
    */
       res.saveAsTextFile("file:///usr/local/spark/mycode/AvgScore/result")
    }
}


(2)在/usr/local/spark/mycode/AvgScore目录下新建simple.sbt,复制如下代码:

name := "Simple Project"
version := "1.0"
scalaVersion := "2.11.12"
libraryDependencies += "org.apache.spark" %% "spark-core" % "2.4.0"

这里我先查看scala 和spark版本并修改

scala 2.11.12 => 2.11.6

spark 2.4.0 => 2.4.0
在spark-shell中读取linux系统本地文件“/home/hadoop/test.txt”,然后统计出文件,大数据,mapreduce,hadoop
在spark-shell中读取linux系统本地文件“/home/hadoop/test.txt”,然后统计出文件,大数据,mapreduce,hadoop
修改好内容如下:
在spark-shell中读取linux系统本地文件“/home/hadoop/test.txt”,然后统计出文件,大数据,mapreduce,hadoop
(3)在/usr/local/spark/mycode/AvgScore目录下执行如下命令打包程序:

sudo /usr/local/sbt/sbt package

在spark-shell中读取linux系统本地文件“/home/hadoop/test.txt”,然后统计出文件,大数据,mapreduce,hadoop
结果如下:
在spark-shell中读取linux系统本地文件“/home/hadoop/test.txt”,然后统计出文件,大数据,mapreduce,hadoop
(4)在/usr/local/spark/mycode/AvgScore 目录下执行如下命令提交程序:

/usr/local/spark/bin/spark-submit --class "AvgScore"  /usr/local/spark/mycode/avgscore/target/scala-2.11/simple-project_2.11-1.0.jar

在spark-shell中读取linux系统本地文件“/home/hadoop/test.txt”,然后统计出文件,大数据,mapreduce,hadoop
(5)在/usr/local/spark/mycode/AvgScore/result 目录下即可得到结果文件。
在spark-shell中读取linux系统本地文件“/home/hadoop/test.txt”,然后统计出文件,大数据,mapreduce,hadoop
补充:
scala运行版本和查看版本不一致,让人思考simple.sbt底下用哪个版本合适

实验结果过后表明,两个版本都可以
在spark-shell中读取linux系统本地文件“/home/hadoop/test.txt”,然后统计出文件,大数据,mapreduce,hadoop
scala2.11.12 底下的运行结果
在spark-shell中读取linux系统本地文件“/home/hadoop/test.txt”,然后统计出文件,大数据,mapreduce,hadoop
查看结果
在spark-shell中读取linux系统本地文件“/home/hadoop/test.txt”,然后统计出文件,大数据,mapreduce,hadoop文章来源地址https://www.toymoban.com/news/detail-789663.html

到了这里,关于大数据基础编程、实验和教程案例(实验七)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【Spark编程基础】实验三RDD 编程初级实践(附源代码)

    1、熟悉 Spark 的 RDD 基本操作及键值对操作; 2、熟悉使用 RDD 编程解决实际具体问题的方法 1、Scala 版本为 2.11.8。 2、操作系统:linux(推荐使用Ubuntu16.04)。 3、Jdk版本:1.7或以上版本。 请到本教程官网的“下载专区”的“数据集”中下载 chapter5-data1.txt,该数据集包含了某大

    2024年03月25日
    浏览(49)
  • 云计算技术 实验九 Spark的安装和基础编程

    1 . 实验学时 4学时 2 . 实验目的 熟悉Spark Shell。 编写Spark的独立的应用程序。 3 . 实验内容 (一)完成Spark的安装,熟悉Spark Shell。 首先安装spark: 将下好的压缩文件传入linux,然后进行压解: 之后移动文件,修改文件权限: 然后是配置相关的文件: Vim进入进行修改: 然后是

    2024年02月05日
    浏览(38)
  • 大数据编程实验四:Spark Streaming

    一、目的与要求 1、通过实验掌握Spark Streaming的基本编程方法; 2、熟悉利用Spark Streaming处理来自不同数据源的数据。 3、熟悉DStream的各种转换操作。 4、熟悉把DStream的数据输出保存到文本文件或MySQL数据库中。 二、实验内容 1.参照教材示例,利用Spark Streaming对三种类型的基

    2024年02月03日
    浏览(43)
  • 大数据编程实验一:HDFS常用操作和Spark读取文件系统数据

    这是我们大数据专业开设的第二门课程——大数据编程,使用的参考书是《Spark编程基础》,这门课跟大数据技术基础是分开学习的,但这门课是用的我们自己在电脑上搭建的虚拟环境进行实验的,不是在那个平台上,而且搭建的还是伪分布式,这门课主要偏向于有关大数据

    2024年04月10日
    浏览(40)
  • 大数据技术原理及应用课实验7 :Spark初级编程实践

    实验7  Spark初级编程实践 一、实验目的 1. 掌握使用Spark访问本地文件和HDFS文件的方法 2. 掌握Spark应用程序的编写、编译和运行方法 二、实验平台 1. 操作系统:Ubuntu18.04(或Ubuntu16.04); 2. Spark版本:2.4.0; 3. Hadoop版本:3.1.3。 三、实验步骤(每个步骤下均需有运行截图) 实

    2024年01月22日
    浏览(43)
  • 11.Linux下Spark的安装配置以及spark-shell的启动和 Spark集群环境搭建

    本案例软件包:链接:https://pan.baidu.com/s/1zABhjj2umontXe2CYBW_DQ  提取码:1123(若链接失效在下面评论,我会及时更新). 目录 (1)安装Spark 1.先用xftp将安装包传到home/hadoop/Downloads文件夹下,然后解压安装。 2.解压缩: 3. 更改文件夹名称: 4.修改hadoop用户对文件夹spark的访问权限

    2024年02月06日
    浏览(33)
  • spark-shell(pyspark)单机模式使用和编写独立应用程序

    spark有四种部署方式:Local,Standalone,Spark on Mesos,Spark on yarn。第一个为单机模式,后三个为集群模式。 spark-shell支持python和scala,这里使用python。 1.启动pyspark环境 在spark安装目录下 进入之后,如下图:  2.编写程序 新建代码文件WordCount.py,并编写程序 运行代码:python3 Wor

    2024年04月14日
    浏览(23)
  • 在 spark-sql / spark-shell / hive / beeline 中粘贴 sql、程序脚本时的常见错误

    《大数据平台架构与原型实现:数据中台建设实战》一书由博主历时三年精心创作,现已通过知名IT图书品牌电子工业出版社博文视点出版发行,点击《重磅推荐:建大数据平台太难了!给我发个工程原型吧!》了解图书详情,京东购书链接:https://item.jd.com/12677623.html,扫描

    2024年02月14日
    浏览(25)
  • Spark编程实验三:Spark SQL编程

    目录 一、目的与要求 二、实验内容 三、实验步骤 1、Spark SQL基本操作 2、编程实现将RDD转换为DataFrame 3、编程实现利用DataFrame读写MySQL的数据 四、结果分析与实验体会 1、通过实验掌握Spark SQL的基本编程方法; 2、熟悉RDD到DataFrame的转化方法; 3、熟悉利用Spark SQL管理来自不同

    2024年02月03日
    浏览(29)
  • Spark编程实验四:Spark Streaming编程

    目录 一、目的与要求 二、实验内容 三、实验步骤 1、利用Spark Streaming对三种类型的基本数据源的数据进行处理 2、利用Spark Streaming对Kafka高级数据源的数据进行处理 3、完成DStream的两种有状态转换操作 4、把DStream的数据输出保存到文本文件或MySQL数据库中 四、结果分析与实验

    2024年02月03日
    浏览(29)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包