Spark编程基础期末复习

选择题

1. spark 的四大组件下面哪个不是 (D)

A.Spark Streaming B Mlib C Graphx D Spark R

2.下面哪个端口不是 spark 自带服务的端口 ( C)

A.8080 B.4040 C.8090 D.18080

3.spark 1.4 版本的最大变化 ( B)

A spark sql Release 版本 B 引入 Spark R C DataFrame D支持动态资源分配

4. Spark Job 默认的调度模式 ( A)

A FIFO B FAIR C 无 D 运行时指定

5.哪个不是本地模式运行的条件 ( D)

A spark.localExecution.enabled=true B 显式指定本地运行 C finalStage 无父 Stage D partition默认值

6.下面哪个不是 RDD 的特点 (C )

A. 可分区 B 可序列化 C 可修改 D 可持久化

7. 关于广播变量,下面哪个是错误的 ( D)

A 任何函数调用 B 是只读的 C 存储在各个节点 D 存储在磁盘或 HDFS

8. 关于累加器,下面哪个是错误的 ( D)

A 支持加法 B 支持数值类型 C 可并行 D 不支持自定义类型

9.Spark 支持的分布式部署方式中哪个是错误的 ( D)

A standalone B spark on mesos C spark on YARN D Spark on local

10.Stage 的 Task 的数量由什么决定 ( A)

A Partition B Job C Stage D TaskScheduler

11.下面哪个操作是窄依赖 ( B)

A join B filter C group D sort

12.下面哪个操作肯定是宽依赖 ( C)

A map B flatMap C reduceByKey D sample

13.spark 的 master 和 worker 通过什么方式进行通信的? (D )

A http B nio C netty D Akka

14 默认的存储级别 (A )

A MEMORY_ONLY B MEMORY_ONLY_SER
C MEMORY_AND_DISK D MEMORY_AND_DISK_SER

15 spark.deploy.recoveryMode 不支持那种 ( D)

A.ZooKeeper B. FileSystem D NONE D hadoop

16.下列哪个不是 RDD 的缓存方法 (C )

A persist() B Cache() C Memory()

17.Task 运行在下来哪里个选项中 Executor 上的工作单元 ( C)

A Driver program B. spark master C.worker node D Cluster manager

18.hive 的元数据存储在 derby 和 mysql 中有什么区别 (B )

A.没区别 B.多会话 C.支持网络环境 D数据库的区别

19.DataFrame 和 RDD 最大的区别 (B )

A.科学统计支持 B.多了 schema C.存储方式不一样 D.外部数据源支持

20.Master 的 ElectedLeader 事件后做了哪些操作 (D )

A. 通知 driver B.通知 worker C.注册 application D.直接 ALIVE

21.下列哪一项不是applicationMaster的功能(D )

A.数据切分 B.为应用程序申请资源,并进一步分配给内部任务C.任务监控与容错D.所有应用的管理者

22.Spark RDD中没有的特性是(D)

A.位置优先B.分布式C.弹性D.固定大小

23.以下是Spark中executor的作用是( ABC)

A.保存计算的RDD分区数据B.向Driver反向注册C.接受Driver端发送来的任务Task,作用在RDD上进行执行D.做资源调度任务

24.Stage 的 Task 的数量不是由什么决定(BCD )

A.Partition B.Job C.Stage D.TaskScheduler

25.spark的特点包括(ABD)

A. 快速 B. 通用 C. 可延伸 D. 兼容性

26.Task 运行不在以下选项中 Executor 上的工作单元(ABD)

A.Driver program B.spark master C.worker node D.Cluster manager

27.关于spark容错说法错误的有(AD)

A.在容错机制中,如果一个节点死机了,而且运算窄依赖,则只要把丢失的父RDD分区重算即可,依赖于其他节点
B.宽依赖开销更大
C.Checkpoint可以节约大量的系统资源
D.RDD的容错机制是基于Spark Streaming的容错机制

28.SparkRdd 转换算子有(ABC)

A. map B. filter C. mapPartitions D. collect

29.下面哪些端口是 spark 自带服务的端口 (ABD)

A. 8080 B. 4040 C. 8090 D. 18080

30.关于spark中数据倾斜引发原因正确的选项有(ABCD)

A. key本身分布不均衡 B. 计算方式有误 C. 过多的数据在一个task里面 D. shuffle并行度不够

31.Spark driver的功能是什么(ABD)

A. 是作业的主进程 B. 负责了作业的调度 C. 负责向HDFS申请资源 D. 负责作业的解析

32.Master 的 ElectedLeader 事件后不做哪些操作(ABC)

A. 通知 driver B. 通知 worker C. 注册 application D. 直接 ALIVE

33.大数据的特点不包括(D )

A:数据量大;B数据类型多;C:处理速度快;D:价值密度高

34.大数据的特点不包括( B )

A:数据量大;B数据类型单一;C:处理速度快;D:价值密度低

35.大数据计算模式不包括( D )

A:批处理计算;B:流计算;C:图计算;D:云计算

36.大数据计算模式不包括(A )

A:离线处理计算;B:流计算;C:图计算;D:查询分析计算

37.scala属于哪种编程语言( D )

A、函数式编程语言 B、汇编语言 C、机器语言 D、多范式编程语言

38.以下Scala变量的定义不正确的是哪项©

A、val words:String=“Hello World”
B、val number = 12
C、var number:String = None
D、var apple:Double = 2

39.以下哪一个不是saprk的特点( C )

A、随处运行
B、代码简洁
C、使用复杂
D、运行快速

40.下面哪一个命令是spark运行pi的命令(A)

A、run-example SparkPi 2
B、Spark-shell SparkPi 2
C、hadoop-daemon jar SparkPi 2
D、yarn jar Spark 2

41.Scala编译后的文件是以什么结尾?(A)

A、.class
B、.bash
C、.pyc
D、.sc

42.以下哪种不属于scala的特性?(D)

A、命令式编程
B、函数式编程
C、静态类型
D、不可扩展性

43.以下哪种可以正确计算数组a的长度?(D)

A、count()
B、take(1)
C、tail( )
D、length( )

44.关于下面函数的结果说法错误的是哪项?©

def getPageNum(file:String) = {
var bookMap = Map(“Chinese” -> 164,“Math” -> 180,“English” -> 150,“Geography” -> 120)
book.getOrElse(file,0)
}
A、getPageNum(“Math”)=180
B、getPageNum(“English”)=150
C、getPageNum(“Physics”)=164
D、getPageNum(“Geography”)=120

45.以下关于List的定义不正确的一项是哪项?©

A、val list = List(12,2,3)
B、val list = List(“Hello World”)
C、val list:String = List(“a”,“b”,“c”)
D、val list = ListInt

46.对于(Set)进行操作"Set(3,0,1)+2+2-2"之后的结果为哪项(B)

A、Set(3,0,1,2)
B、Set(3,0,1)
C、Set(3,0)
D、以上均不正确

47.关于下面元组的结果说法错误的是哪项?©

scala> val tuple=(“Bigdata”,2015,45.0)
Scala> val (t1,t2,t3)=tuple
A、t1:string=Bigdata
B、t2:Int=2015
C、t3:Int=45.0
D、t3:Double=45.0

简答题

1:请阐述大数据处理的基本流程。

大数据的基本处理流程主要包括数据采集、存储管理、处理分析、结果呈现等环节。

2:简述Scala语言的基本特性。

简洁、兼容、可扩展和静态类型

3:什么是单例对象和伴生对象?

  • 单例对象:在第一次被访问的时候初始化。单例对象包括两种,即伴生对象和孤立对象。当一个单例对象和它的同名类一起出现时,这时的单例对象被称为这个同名类的“伴生对象”。没有同名类的单例对象,被称为孤立对象
  • 伴生对象:当单例对象与某个类具相同的名称时,它被称为这个类的“伴生对象”

4. 阐述MapReduce的基本设计思想。

  • “计算向数据靠拢”

5. Spark是基于内存计算的大数据计算平台,请阐述Spark的主要特点。

  • 运行速度快:spark适应先进的有向无环图执行引擎,以支持循环数据流与内存计算,基于内存的执行速度可以比hadoop MapReduce快上百倍,基于磁盘的执行速度也能快十倍‘;
  • 容易使用:spark支持使用scala、java、Python和R语言进行编程,简介的API设计有助于用户轻松构件并行程序,并且可以通过spark shell进行交互式编程
  • 通用性:spark提供了完整而强大的技术栈,包括SQL查询、流式计算、机器学习和图算法组件,这些组件可以无缝整合在同一个应用中,足以应对复杂的计算;
  • 运行模式多样:spark可运行于独立的集群模式中,或者运行与hadoop中,也可以运行与Amazon EC2等云环境中,并且可以访问HDFS、Cassandra、Hbase。HIve等多种数据源。

在下列语句的基础上,

scala> import scala.collection.mutable.ListBuffer
scala>val mutableL1=ListBuffer(1,2,3)//初始长度为3的变长列表
写出下列语句的作用。
(1)mutableL1+=5 mutableL1-=3
答:在列表的尾部增加一个元素5,删除值为3的第一个元素
(2)mutalbeL1.insert(2,5,6)
答:从第2个缩影位置开始,插入5和6

写出Scala语句完成下列操作。

将下列 json 数据复制到你的 ubuntu 系统/usr/local/spark 下,并保存命名为 employee. json。
{ “id”:1 ,“name”:" Ella",“age”:36 }
{ “id”:2,“name”:“Bob”,“age”:29 }
{ “id”:3 ,“name”:“Jack”,“age”:29 }
{ “id”:4 ,“name”:“Jim”,“age”:28 }
{ “id”:5 ,“name”:“Damon” }
{ “id”:5 ,“name”:“Damon” }
首先为
employee. json 创建 DataFrame,代码如下。
scala> import org. apache. spark. sql. SparkSession
scala> val spark=SparkSession. builder(). getOrCreate()
scala> import spark. implicits. _
scala> val df = spark. read. json(“file:///usr/local/spark/employee. json”)

  • 查询 DataFrame 的所有数据;
    • df.show()
  • 查询所有数据并去重;
    • df.distinct.show()
  • 查询所有数据,打印时去除id字段
    • df.drop("id").show()
  • 筛选出age>=30的记录
    • df.filter(df("age")>30).show()
  • 将数据按age分组;
    • df.groupBy("age").count().show()
  • 将数据按 name 升序排列 ;
    • df.orderBy("naem").show()或者df.sort(df("name").asc).show()
  • 取出前 4 行数据 ;
    • df.limit(4).show()或者df.take(4)
  • 查询所有记录的 name 列,并为其取别名为 username ;
    • df.select(df("name").as("username")).show()
  • 查询年龄 age 的平均值 ;
    • df.agg("agg"->"avg").show()
  • 查询年龄 age 的最小值 。
    • df.agg("agg"->"min").show()

一些散乱的知识点

大数据的4个特点:
  • 数据量大,数据类型繁多,处理速度快,价值密度低
MapReduce设计的一个理念就是
  • “计算向数据靠拢”
yarn是负责集群资源调度管理的组件
目前,可以运行在yarn之上的计算框架包括离线批处理框架MapReduce,内存计算框架spark,流计算框架storm和DAG时就按框架Tez等。
spark和hadoop的对比
  • hadoop中的MapReduce就算框架主要存在的缺点
    • 表达能力有限。计算都必须转化成Map和Reduce两个操作,但这并不适合所有的请款,难以描述复杂的数据处理过程;
    • 磁盘I/O开销大。每次执行时都需要从磁盘读取数据,并且在计算完成后需要将中间结果写入到磁盘中,I/O开销较大
    • 延迟高。一次计算可能需要分解成一系列按顺序执行的MapReduce任务,任务自己拿的衔接由于涉及到I/O开销,会产生较高的延迟。而且,在前一个任务执行完成之前,其他任务无法开始,因此,难以胜任复杂、多阶段的计算任务。
  • spark在借鉴MapReduce优点同时,很好地解决了MapReduce的缺点,spark的优点有
    • spark的计算模式也属于MapReduce,但不局限于Map和Reduce操作,还提供了多种数据集操作类型,编程模型比MapReduce更灵活;
    • spark提供了内存计算,中间结果直接放到内存中,带来了更高效的迭代运行效率;
    • spark基于DAG的任务调度执行机制,要优于MapReduce的迭代执行机制
scala简介
  • scala运行与java虚拟机(jvm)上并且兼容现有的java程序,可以与java类进行互操作,包括调用java方法,创建java对象,继承java类和实现java接口。
  • scala是一门纯粹的面向对象语言。在scala语言中,每个值都是对象,每个操作都是方法调用。对象的数据类型以及行为由类和特质描述。类抽象机制的扩展有两种途径,一种途径是子类继承,另一种途径是灵活的混入(mixin)机制,这两种途径能避免多重继承的问题。
  • scala也是一门函数式语言。在scala语言中,每个函数都是一个对象,并且和其他类型(如整数、字符串等)的值处于同一地位。scala提供了轻量级的语法用以定义匿名函数、同时支持高阶函数,允许嵌套多层函数,并支持柯里化。
scala的数据结构又:数组、元组、列表、映射、集合
scala中list和vector都是不可变的,其包含对象一单确定就不能增加和删除。他们对应的可变版本为listbuffer和arraybuffer
单例对象的定义与类定义类似,只是用object关键字替换了class关键字
当单例对象与某个类具相同的名称时,它被称为这个类的“伴生对象”,相应的类被称为这个单例对象的“伴生类”。伴生对象和它的伴生类必须位于同一个文件中,它们之间可以相互访问对方的私有成员。

RDD设计背景

  • 在实际应用中,存在许多迭代式算法和交互式数据挖掘工具,这些应用场景的不同计算阶段之间会重用中间计算结果,但是这些框架的计算结果往往是存储在不同位置的,计算模式往往也是只能支持特定的计算模式,并没有一种通用的数据抽象
RDD概念
  • 一个RDD就是一个分布式对象集合,本质上就是一个只读的分区记录集合,每个RDD可以分成多个分区,每个分区就是一个数据集片段,并且一个RDD的不同分区可以被保存到集群中不同的节点上,从而可以在集群中不同节点上进行并行计算。
spark用scala语言实现了RDD的API,程序员可以用过调用API实现对RDD是各种操作,RDD典型的执行过程如下:
  • RDD读入外部数据源(或者内存中的集合)进行创建;
  • RDD经过一系列的“转换”操作,每一次都会产生不同的RDD,提供给一下“转换”使用;
  • 最后一个RDD经“行动”操作进行处理,并输出到外部数据源(或者编程scala集合或标量)
RDD–转换操作
  • 对RDD而言,每一次转换操作都会产生不同的RDD,提供给下一个操作使用,RDD的转换过程是惰性求值的,也就是说,整个转换过程只是记录了转换的轨迹,并不会发生真正的计算,只有遇到行动操作时,才会触发“从头到尾”的真正的计算
常用的RDD转换操作API
操作含义
filter(func)筛选出满足函数func的元素,并返回一个新的数据集
map(func)将每个元素传递带函数func中,并将结果返回为一个新的数据集
flatMap(func)与map()相似,但每个输入元素都可以映射到0或多个输出结果
groupByKey()应用于(K,V)键值对的数据集时,返回一个新的 (K,Iterable)形式的数据集
reduceByKey(func)应用于(K,V)键值对的数据集时,返回一个新的 (K,V)形式的数据集,其中每个值是将每个key传递到函数func中进行聚合后的结果
RDD–行动操作
  • 行动操作是真正触发计算的地方,spark程序只有执行到行动操作是,才会执行真正的 计算,从文件中加载数据,完成一次又一次的转换操作,最终,完成行动操作得到结果。
常用的RDD行动操作API
操作含义
count()返回数据集中的元素个数
collect()以数组的形式返回数据集中的所有元素
first()返回数据集中的第一个元素
taken(n)以数组的形式返回数据集总共的前n个元素
reduce(func)通过函数func(输入两个参数并返回一个值)聚合数据集中的元素
foreach(func)将数据集中的每个元素传递到函数func中运行
  • 28
    点赞
  • 319
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
以下代码有问吗:@PostMapping("/userLogin") public String userLogin(@RequestParam("username") String usernam,@RequestParam("password") String password,@RequestParam("character") String character, HttpServletRequest request, HttpServletResponse response,HttpSession session) { //登录方法 if (StringUtils.isEmpty(username)) { request.setAttribute("error","请输入用户名");return "login";} if (StringUtils.isEmpty(password)) { request.setAttribute("error","请输入密码");return "login";} if (StringUtils.isEmpty(character)) { request.setAttribute("error","请勾选身份");return "login";} //判断输入的内容是否为空 if (!username.matches("[a-zA-Z0-9_]{1,12}")) { request.setAttribute("error", "用户名长度应为1-12个字符, 只能包含字母、数字和下划线"); return "login"; } if (!password.matches("[a-zA-Z0-9_]{1,12}")) { request.setAttribute("error", "密码长度应为1-12个字符, 只能包含字母、数字和下划线"); return "login"; } // 验证用户名和密码的长度和格式 if(character.equals("1")){//判断登录角色是买家还是卖家 Buyer buyer= new Buyer(null,username,password); if(buyerService.buyerLogin(buyer) != null){ request.getSession().setAttribute("buyer",buyer);//将买家信息保存到session request.setAttribute("success","登录成功");return "applianceby";//买家登录} request.setAttribute("error","用户名或密码不正确,请重试");return "login"; }else{Seller seller= new Seller(null,username,password); if(sellerService.sellerLogin(seller) != null) { request.getSession().setAttribute("seller",seller); //将卖家信息保存到session request.setAttribute("success","登录成功");return "appliancesl";//卖家登录} request.setAttribute("error","用户名或密码不正确,请重试");return "login";}}
07-25
这段代码存在一些错误和潜在的问。我将逐个指出并提供修复建议: 1. 在方法签名中,参数名应为`username`,而不是`usernam`。修复方法:将`usernam`改为`username`。 2. 在判断用户名和密码是否为空时,使用了错误的参数名。修复方法:将`StringUtils.isEmpty(username)`和`StringUtils.isEmpty(password)`改为`StringUtils.isEmpty(usernam)`和`StringUtils.isEmpty(password)`。 3. 在验证用户名和密码的长度和格式时,使用了错误的参数名。修复方法:将`!username.matches("[a-zA-Z0-9_]{1,12}")`和`!password.matches("[a-zA-Z0-9_]{1,12}")`改为`!usernam.matches("[a-zA-Z0-9_]{1,12}")`和`!password.matches("[a-zA-Z0-9_]{1,12}")`。 4. 在创建`Buyer`和`Seller`对象时,构造函数中的参数顺序和类型不匹配。修复方法:确保构造函数的参数顺序和类型与实际定义的一致。 5. 在验证买家或卖家登录时,使用了错误的服务类方法名。修复方法:将`buyerService.buyerLogin(buyer)`改为正确的买家登录验证方法名,以及将`sellerService.sellerLogin(seller)`改为正确的卖家登录验证方法名。 6. 在买家或卖家登录成功时,需要使用重定向而不是直接返回视图名称。修复方法:将`return "applianceby"`改为`return "redirect:/applianceby"`,以及将`return "appliancesl"`改为`return "redirect:/appliancesl"`。 7. 在买家或卖家登录失败时,应该在重定向的页面中显示错误提示。修复方法:将`request.setAttribute("error","用户名或密码不正确,请重试")`改为`request.getSession().setAttribute("error","用户名或密码不正确,请重试")`。 以上是我对代码的修复建议。请根据实际情况进行修复,并确保在实际使用中对异常情况进行适当的处理和错误提示。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值