草庐IT

云计算实验3 基于Scala编程语言的Spark数据预处理实验

Mr.NeoJeep 2023-08-29 原文

一、 实验目的

掌握Scala语言编程基础和弹性分布式数据集RDD的基本操作,掌握大数据格式与大数据预处理方法

二、 实验环境

Linux的虚拟机环境和实验指导手册

三、 实验任务

完成Scala编程语言基础实验、RDD编程实验和大数据预处理实验。

四、 实验步骤

请按照实验指导手册 ,完成以下实验内容:
实验3-1 Scala语言编程基础

(1) Scala基本语法
(2) Scala基本数据类型和Scala函数等

实验3-2 弹性分布式数据集RDD基本操作

(1) RDD编程基础
(2) 转化和行动操作等

实验3-3 Spark数据预处理实验——Apache服务器访问日志分析行

(1) 日志数据格式与数据预处理
(2) 统计PV、IP、页面访问量等

五、 实验作业

  1. 提交实验报告电子稿和纸质稿,内容包括安装步骤及主要配置方法说明,关键步骤截图,并对截图内容进行解释说明;
  2. 个人对实验的总结和心得,本实验具有一定难度和繁琐程度,请总结与撰写自身遇到的问题,以及解决问题的过程。
  3. 搜索互联网并回答问题:谈谈我们如何利用大数据技术减少能源消耗和保护环境?

六、 实验结果与分析

1、安装步骤及主要配置方法说明

A、实验3-1 Scala语言编程基础

(1) Scala基本语法
(2) Scala基本数据类型和Scala函数等
1、编写脚本,安装scala

#! /bin/sh
#run as zkpk@master
#configure scala 

#configure scala
echo "=====start to install scala====="
tar -xzvf /home/zkpk/tgz/spark/scala-2.11.0.tgz -C /home/zkpk
echo 'export SCALA_HOME=/home/zkpk/scala-2.11.0' >> /home/zkpk/.bash_profile
echo 'export PATH=$SCALA_HOME/bin:$PATH' >> /home/zkpk/.bash_profile
source /home/zkpk/.bash_profile

echo "=====scala installed successfully====="

2、基础语法示例—输出hello,world
编写代码

测试

3、常见的数据类型和变量使用
命令行测试

4、函数的使用
编写代码1

运行测试1

编写代码2

运行测试2

编写代码3

运行测试3

柯里化函数的使用

可变长参数:可以向函数中传入多个同类型的参数

5、类的使用
构造函数


抽象类

B、实验3-2 弹性分布式数据集RDD基本操作

(1) RDD编程基础
(2) 转化和行动操作等

1、启动spark-shell

2、RDD的创建与使用

使用textFile读取本地的系统文件,并计算整个文件中的字符总长度


3、RDD操作

4、函数的使用

5、用于操作k-v对的RDD操作


6、共享变量的使用
广播变量

累加器

C、实验3-3 Spark数据预处理实验——Apache服务器访问日志分析行

(1) 日志数据格式与数据预处理
(2) 统计PV、IP、页面访问量等

1、启动spark-shell


2、解析日志文件

3、统计每日PV,使用count操作


4、使用sortByKey,按照请求日期字段进行排序,并将结果保存到本地


5、统计独立IP数

6、统计每种不同的HTTP状态对应的访问次数,并且以降序展示


7、统计不同独立IP的访问量,按照降序排列并展示前10条

8、统计不同页面的访问量

9、由于日志中有大量的js文件的访问,因此我们增加一个去除列表,过滤掉属于列表中后缀名的文件再对过滤后的logRDDv9执行统计操作

2、实验的总结和心得

本次实验主要使用了Scala语言进行基本的操作,基本熟悉Scala的基本语法、数据类型以及函数的使用,在spark-shell下完成RDD的基本操作,根据实际业务需求使用spark 完成对Apache格式的日志内容的分析,了解了自定义日志过滤函数、日志预处理、日志的相关指标等操作。
因为Spark的源码是用Scala语言编写的,所以对我们来说学习Scala语言就很有意义,但是没有必要完全重新去学Scala,只要我们有一定的Java和C++的编程基础,基本看懂Scala问题不大,遇到不懂的再去查阅资料,这是一种更有效率的学习方法。
日志记录了web服务器接收处理请求以及运行时错误等各种原始信息。通过对日志进行统计、分析、综合,就能有效地掌握服务器的运行状况,发现和排除错误原因,所以学会日志的使用对我们更好的使用大数据平台至关重要。

实验总结

  • 利用脚本完成重复化的工作
  • 在Scala中,如果子类和父类在实际上没有什么区别,那么类型别名是优于继承的
  • RDDa.sortBy和RDDa.sortByKey中的sortBy和sortByKey都是transform操作,遇到action操作后才会触发操作

3、谈谈我们如何利用大数据技术减少能源消耗和保护环境?

随着现代信息通讯技术的迅速发展和广泛应用,智能制造、网络购物、移动支付、共享经济等产业蓬勃发展,大数据在其中发挥着非常重要的作用,对绿色发展特别是在绿色生产、绿色生活和美好环境等方面也表现出显著的促进作用。具体而言,大数据促进绿色发展主要是通过大数据进行资源整合、实施科学决策、建立公共服务平台、创新生态环境监管模式,促进提质增效、技术创新和环境治理,推动产业转型升级、需求结构优化,最终形成绿色生产和绿色生活的绿色发展模式,以及人民所向往的美好环境。

  1. 通过大数据整合资源,促进产业转型升级,实现提质增效
    以互联网为桥梁,大数据把产品从生产到消费的全过程连接起来,成为绿色生产的关键
    要素,为中国经济注入新动能。
  2. 通过建立公共服务平台和数据库推动绿色发展
    随着大数据、互联网的迅速发展和节能、绿色生活、减少消费浪费等新观念的形成,分
    享经济出现并得到快速发展。分享经济的出现,打破了企业对企业( B2B) 、企业对个人( B2C) 的传统交易模式,这种公共服务平台不仅为企业和个人带来巨大的经济效益,也极大地促进了绿色发展。公共服务平台依托大数据,通过对海量数据的分析和运用在供给与需求之间进行有效匹配,提高资源配置效率,减少资源消耗,实现绿色发展。这种公共服务平台在生产和生活方面都对绿色发展产生影响。
  3. 通过大数据保护生态环境,建设环境监管体系,促进绿色发展
    目前,许多地方政府和有关管理部门都建立了生态环境数据信息管理系统,包括数据库、操作系统、开发应用等。但受部门间、部门内部封闭式的管理模式的影响,使得政府的不同部门之间、政府与企业之间、政府与社会公众之间数据信息资源不能顺利交流和有效利用,大量数据信息资源处于闲置状态,造成数据信息资源的严重浪费。生态环境大数据具有较强的数据信息整合功能,通过大数据的充分开发与应用,整合环保系统、相关部门、互联网企业的部门化、企业化、碎片化的生态环境数据信息,打破数据信息壁垒,形成全面完整的生态环境数据信息系统,从而实现生态环境决策的科学化,生态环境监管的精准化以及生态环境服务的便捷化。

有关云计算实验3 基于Scala编程语言的Spark数据预处理实验的更多相关文章

  1. ruby - 如何指定 Rack 处理程序 - 2

    Rackup通过Rack的默认处理程序成功运行任何Rack应用程序。例如:classRackAppdefcall(environment)['200',{'Content-Type'=>'text/html'},["Helloworld"]]endendrunRackApp.new但是当最后一行更改为使用Rack的内置CGI处理程序时,rackup给出“NoMethodErrorat/undefinedmethod`call'fornil:NilClass”:Rack::Handler::CGI.runRackApp.newRack的其他内置处理程序也提出了同样的反对意见。例如Rack

  2. ruby-on-rails - 使用一系列等级计算字母等级 - 2

    这里是Ruby新手。完成一些练习后碰壁了。练习:计算一系列成绩的字母等级创建一个方法get_grade来接受测试分数数组。数组中的每个分数应介于0和100之间,其中100是最大分数。计算平均分并将字母等级作为字符串返回,即“A”、“B”、“C”、“D”、“E”或“F”。我一直返回错误:avg.rb:1:syntaxerror,unexpectedtLBRACK,expecting')'defget_grade([100,90,80])^avg.rb:1:syntaxerror,unexpected')',expecting$end这是我目前所拥有的。我想坚持使用下面的方法或.join,

  3. ruby - 寻找通过阅读代码确定编程语言的ruby gem? - 2

    几个月前,我读了一篇关于ruby​​gem的博客文章,它可以通过阅读代码本身来确定编程语言。对于我的生活,我不记得博客或gem的名称。谷歌搜索“ruby编程语言猜测”及其变体也无济于事。有人碰巧知道相关gem的名称吗? 最佳答案 是这个吗:http://github.com/chrislo/sourceclassifier/tree/master 关于ruby-寻找通过阅读代码确定编程语言的rubygem?,我们在StackOverflow上找到一个类似的问题:

  4. ruby - 分布式事务和队列,ruby,erlang,scala - 2

    我有一个涉及多台机器、消息队列和事务的问题。因此,例如用户点击网页,点击将消息发送到另一台机器,该机器将付款添加到用户的帐户。每秒可能有数千次点击。事务的所有方面都应该是容错的。我以前从未遇到过这样的事情,但一些阅读表明这是一个众所周知的问题。所以我的问题。我假设安全的方法是使用两阶段提交,但协议(protocol)是阻塞的,所以我不会获得所需的性能,我是否正确?我通常写Ruby,但似乎Redis之类的数据库和Rescue、RabbitMQ等消息队列系统对我的帮助不大——即使我实现某种两阶段提交,如果Redis崩溃,数据也会丢失,因为它本质上只是内存。所有这些让我开始关注erlang和

  5. 叮咚买菜基于 Apache Doris 统一 OLAP 引擎的应用实践 - 2

    导读:随着叮咚买菜业务的发展,不同的业务场景对数据分析提出了不同的需求,他们希望引入一款实时OLAP数据库,构建一个灵活的多维实时查询和分析的平台,统一数据的接入和查询方案,解决各业务线对数据高效实时查询和精细化运营的需求。经过调研选型,最终引入ApacheDoris作为最终的OLAP分析引擎,Doris作为核心的OLAP引擎支持复杂地分析操作、提供多维的数据视图,在叮咚买菜数十个业务场景中广泛应用。作者|叮咚买菜资深数据工程师韩青叮咚买菜创立于2017年5月,是一家专注美好食物的创业公司。叮咚买菜专注吃的事业,为满足更多人“想吃什么”而努力,通过美好食材的供应、美好滋味的开发以及美食品牌的孵

  6. 基于C#实现简易绘图工具【100010177】 - 2

    C#实现简易绘图工具一.引言实验目的:通过制作窗体应用程序(C#画图软件),熟悉基本的窗体设计过程以及控件设计,事件处理等,熟悉使用C#的winform窗体进行绘图的基本步骤,对于面向对象编程有更加深刻的体会.Tutorial任务设计一个具有基本功能的画图软件**·包括简单的新建文件,保存,重新绘图等功能**·实现一些基本图形的绘制,包括铅笔和基本形状等,学习橡皮工具的创建**·设计一个合理舒适的UI界面**注明:你可能需要先了解一些关于winform窗体应用程序绘图的基本知识,以及关于GDI+类和结构的知识二.实验环境Windows系统下的visualstudio2017C#窗体应用程序三.

  7. 计算机毕业设计ssm+vue基本微信小程序的小学生兴趣延时班预约小程序 - 2

    项目介绍随着我国经济迅速发展,人们对手机的需求越来越大,各种手机软件也都在被广泛应用,但是对于手机进行数据信息管理,对于手机的各种软件也是备受用户的喜爱小学生兴趣延时班预约小程序的设计与开发被用户普遍使用,为方便用户能够可以随时进行小学生兴趣延时班预约小程序的设计与开发的数据信息管理,特开发了小程序的设计与开发的管理系统。小学生兴趣延时班预约小程序的设计与开发的开发利用现有的成熟技术参考,以源代码为模板,分析功能调整与小学生兴趣延时班预约小程序的设计与开发的实际需求相结合,讨论了小学生兴趣延时班预约小程序的设计与开发的使用。开发环境开发说明:前端使用微信微信小程序开发工具:后端使用ssm:VU

  8. kvm虚拟机安装centos7基于ubuntu20.04系统 - 2

    需求:要创建虚拟机,就需要给他提供一个虚拟的磁盘,我们就在/opt目录下创建一个10G大小的raw格式的虚拟磁盘CentOS-7-x86_64.raw命令格式:qemu-imgcreate-f磁盘格式磁盘名称磁盘大小qemu-imgcreate-f磁盘格式-o?1.创建磁盘qemu-imgcreate-fraw/opt/CentOS-7-x86_64.raw10G执行效果#ls/opt/CentOS-7-x86_64.raw2.安装虚拟机使用virt-install命令,基于我们提供的系统镜像和虚拟磁盘来创建一个虚拟机,另外在创建虚拟机之前,提前打开vnc客户端,在创建虚拟机的时候,通过vnc

  9. ruby - 如何计算 Liquid 中的变量 +1 - 2

    我对如何计算通过{%assignvar=0%}赋值的变量加一完全感到困惑。这应该是最简单的任务。到目前为止,这是我尝试过的:{%assignamount=0%}{%forvariantinproduct.variants%}{%assignamount=amount+1%}{%endfor%}Amount:{{amount}}结果总是0。也许我忽略了一些明显的东西。也许有更好的方法。我想要存档的只是获取运行的迭代次数。 最佳答案 因为{{incrementamount}}将输出您的变量值并且不会影响{%assign%}定义的变量,我

  10. ruby - 使用 Ruby,计算 n x m 数组的每一列中有多少个 true 的简单方法是什么? - 2

    给定一个nxmbool数组:[[true,true,false],[false,true,true],[false,true,true]]有什么简单的方法可以返回“该列中有多少个true?”结果应该是[1,3,2] 最佳答案 使用转置得到一个数组,其中每个子数组代表一列,然后将每一列映射到其中的true数:arr.transpose.map{|subarr|subarr.count(true)}这是一个带有inject的版本,应该在1.8.6上运行,没有任何依赖:arr.transpose.map{|subarr|subarr.in

随机推荐