实验七:Spark初级编程实践

由于CSDN上传md文件总是会使图片失效
完整的实验文档地址如下:
https://download.csdn.net/download/qq_36428822/86224843?spm=1001.2014.3001.5501


1、实验环境:

设备名称 LAPTOP-9KJS8HO6
处理器 Intel® Core™ i5-10300H CPU @ 2.50GHz 2.50 GHz
机带 RAM 16.0 GB (15.8 GB 可用)
主机操作系统 Windows 10 家庭中文版
虚拟机操作系统 ubuntukylin-16.04
Hadoop 版本 3.1.3
JDK 版本 1.8
Java IDE:Eclipse
系统类型 64 位操作系统, 基于 x64 的处理器
笔和触控 没有可用于此显示器的笔或触控输入

2、实验内容与完成情况:

  1. 安装hadoop和spark。
    将下载好的安装包解压至固定路径并安装
    使用命令./bin/spark-shell启动spark

图2启动spark

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

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

图4 hdfs上传文件1.txt

图5 spark统计hdfs文件1.txt行数

(3) 编写独立应用程序(推荐使用Scala语言),读取HDFS系统文件“/user/hadoop/test.txt”(如果该文件不存在,请先创建),然后,统计出文件的行数;通过sbt工具将整个应用程序编译打包成 JAR包,并将生成的JAR包通过 spark-submit 提交到 Spark 中运行命令。

SimpleApp.scala文件内代码内容如下所示:

图6 SimpleApp.scala文件内容

simple.sbt文件内代码如下:

图7 simple.sbt文件内容

使用、usr/local/sbt/sbt package命令将以上代码文件夹打jar包,打包完成后可看到打包成功的输出,如下图:

图8 sbt打包
运行打好的jar包,使用命令/usr/local/spark/bin/spark-submit --class “SimpleApp” /usr/local/spark/mycode/HDFStest/target/scala-2.11/a-simple-hdfs-test_2.11-1.0.jar即可,如下:

图9 运行结果:文件中行数4行
3. 编写独立应用程序实现数据去重
对于两个输入文件 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
RemDup.scala文件内代码内容如下所示:
图10 RemDup.scala文件内容
创建simple.sbt文件并向其中输入代码,使用命令/usr/local/sbt/sbt package 将代码文件夹打包,打包成功后结果如下:
图11 simple.sbt文件内容
图12 RemDup工程打包结果
再使用命令/usr/local/spark/bin/spark-submit --class “RemDup” /home/hadoop/sparkapp2/RemDup/target/scala-2.11/remove-duplication_2.11-1.0.jar
即可运行,结果如下

图13 程序运行结果

  1. 编写独立应用程序实现求平均值问题
    每个输入文件表示班级学生某个学科的成绩,每行内容由两个字段组成,第一个是学生名字,第二个是学生的成绩;编写 Spark 独立应用程序求出所有学生的平均成绩,并输出到一个新文件中。下面是输入文件和输出文件的一个样例,供参考。
    Algorithm 成绩:
    小明 92
    小红 87
    小新 82
    小丽 90
    Database 成绩:
    小明 95
    小红 81
    小新 89
    小丽 85
    Python 成绩:
    小明 82
    小红 83
    小新 94
    小丽 91
    平均成绩如下:
    (小红,83.67)
    (小新,88.33)
    (小明,89.67)
    (小丽,88.67)
    创建代码文件夹,并创建存放成绩数据的文件夹datas,使用vim命令向其中添加题示数据:

图14 成绩数据文件
图15 AvgScore.scala代码
图16 simple.sbt文件
图17 sbt打包结果

运行jar包,使用命令/usr/local/spark/bin/spark-submit --class “AvgScore” /home/hadoop/sparkapp3/AvgScore/target/scala-2.11/average-score_2.11-1.0.jar
得到运行结果,每个学生的平均成绩如下:

图18 程序运行结果

3、出现的问题:

1、用spark读取本地文件并统计文件内容行数时报出IllegalArgumentException(非法参数异常)

图19 问题1

2、用spark读取hdfs文件系统中的文件并统计文件内容行数时报出InvalidInputException(无效输入异常),并提示输入路径不存在

图20 问题2

3、编写spark独立应用程序并实现数据去重时,程序运行报出异常:java.net.URISyntaxException: Illegal character in scheme name at index 0

图21 问题3

4、解决方案:

1、spark读取本地文件的url路径有问题,正确的应该是val textFile=sc.textFile(“file:///usr/local/hadoop/1.txt”),错误原因是file:///少打了一个/

2、依然是读取hdfs文件的url路径有问题,hdfs文件系统的根目录不是~,而应该是/user/hadoop,其中hadoop是用户名

3、代码中获取hdfs文件的地址URL前面有空格,就会报错java.net.URISyntaxException: Illegal character in scheme name at index 0,删掉空格就好了

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
实验7中,我们学习到了如何使用Spark来进行编程实践,其中使用的是Scala语言。Spark是一个开源的分布式计算框架,它可以高效地处理大规模的数据集。 在实验中,我们首先学习了Spark的基本概念和架构。Spark使用了RDD(弹性分布式数据集)作为其核心数据结构,可以将数据集分布在集群的多个节点上,并通过并行计算来进行高效处理。我们还了解了Spark的运行模式,包括本地模式和集群模式,并学习了如何设置和配置Spark的运行环境。 接着,我们学习了使用Scala语言编写Spark应用程序的方法。Scala是一种功能强大的静态类型编程语言,它可以与Java无缝集成,并且提供了很多简化编程的特性。我们学习了如何使用Scala的函数式编程特性来编写Spark应用程序,并通过实例演示了如何加载数据、转换数据以及进行数据分析和计算。 在实验中,我们还学习了Spark的常见操作和转换,包括map、reduce、filter、join等。这些操作可以帮助我们对数据进行各种复杂的计算和处理,而无需编写繁琐的循环和条件判断。我们还学习了如何使用Spark的持久化机制来优化计算性能,包括将数据缓存到内存中和将数据持久化到磁盘上。 最后,我们在实验中使用了Spark进行了几个实际的编程练习。通过这些练习,我们学习了如何在Spark中加载和处理不同类型的数据,包括文本数据、CSV文件和JSON数据。我们还学习了如何使用Spark进行数据清洗、数据转换和数据分析,并学习了如何使用Spark的机器学习库来进行简单的机器学习任务。 总的来说,实验7是一个非常实用和综合的实验,通过学习和实践,我们对Spark编程有了更深入的了解和掌握。同时,我们也学习到了如何使用Scala语言来编写高效的分布式计算程序。这些知识和技能对于我们在实际工作中处理大数据和进行分布式计算非常有帮助。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

是小猪猪哦

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值