Spark期末复习题库

news/2025/1/21 21:46:15/

一、填空

1. Spark Web监控页面的端口地址是_______localhost:4040__________

2. 在Spark安装目录下的conf目录中,修改名为_log4j.properties__配置文件,可以避免Spark程序在运行时输出过多的信息

3. 启动基于Python的Spark交互式命令行的命令是______pyspark__________

4. Spark Core提供了Spark最基础与最核心的功能,它的子框架包括___Spark SQL____、____Spark Streaming_______、______MLlib_____、___GraphX_____

5. 调用cache()方法进行持久化操作时,执行的持久化级别是______MEMORY_ONLY_____

6. 算子可以分为____transform(转换)___算子和____action(执行)_____算子两大类。

7. 图有_______有向图________和________无向图_______构成

8. 顶点DataFrame必须包括列名为____“id”_____的列,以作为顶点的唯一标识。边DataFrame必须包含名为src____和__dst__列,以作为起点和终点的唯一标识。

9. 计算两个RDD交集的算子是____intersection()_____

10. 下图的强连通分量有____2____个。顶点d的度是________4_____,入度是______2_________,出度是_____2________

二、判断

1. 图可以只有顶点,没有边(√)

2. Spark的底层是使用Scala编程语言编写的 (√)

3. RDD Transformation算子的返回值一定是RDD (√)

4. DataFrame无法转换到RDD (×)

5. GraphFrames库不是Spark项目自带的,需另外安装。安装时无需考虑GraphFrames的版本问题 (×)

6. RDD和DataFrame的区别之一是,后者具备Schema (√)

7. Transformation算子都是懒执行,如果不调用Action算子就不会执行 (√)

8. RDD对象都是只读的 (√)

9. Spark SQL是Spark用来操作结构化或者半结构化数据的组件 (√)

三、计算

1. sc.parallelize([1, 2, 3, 4, 5]).filter(lambda x : x%2 == 0).collect()的运行结果是____[2,4]____

2. sc.parallelize([1, 2, 3, 4, 6, 7, 8]).top(3)的运行结果是____[8,7,6]_____

3. sc.parallelize([1, 2, 3, 4, 6, 7, 8]).take(3)的运行结果是___[1,2,3]______

4. 已知:tmp = [('a', 1), ('b', 2), ('1', 3), ('d', 4), ('2', 5)],那么:

sc.parallelize().sortBy(lambda x: x[1],False).collect()的运行结果是

_[('2', 5), ('d', 4), ('1', 3), ('b', 2), ('a', 1)]

5. sc.parallelize([('a', 1), ('b', 2), ('a', 3),]).groupByKey().mapValues(list).collect()的运行结果是_____[('a', [1, 3]), ('b', [2])]  

6. sc.parallelize([(1, 2), (3, 4)]).keys().collect()的运行结果是_____[1,3]_______

7. sc.parallelize([(1, 2), (3, 4)]).values().collect()的运行结果是_______[2,4]________

8. sc.parallelize([1, 2, 3, 4, 5]).reduce(add) 的运行结果是_________15___________

9. sc.parallelize([4, 6, 8, 2, 9]).takeOrdered(2)的运行结果是________[2,4]______________

10. sc.parallelize([10, 4, 2, 12, 3]).first() 的运行结果是_______10_______________

11. sc.parallelize([("a", 1), ("b", 1), ("a", 1)]).countByKey()的运行结果是_____defaultdict(int, {'a': 2, 'b': 1})__________

12. 已知:rdd1 = sc.parallelize([1, 10, 2, 3, 4, 5]),

rdd2 = sc.parallelize([1, 6, 2, 3, 7, 8])

那么,rdd1.intersection(rdd2).collect()的运行结果是_____[1,2,3]____________

13. 已知list01 = ["what is your name", "my name is john", "nice to meet you"]

(1)请通过RDD编程计算list01中各个元素的长度。并通过图示画出RDD的转换过程。

sc.parallelize(list01).map(lambda x : len(x)).collect()

x

map

Len(x)
"what is your name"17
 "my name is john"15
"nice to meet you"16

(2)请通过RDD编程计算list01中各个元素中各个单词的长度。并通过图示画出RDD的转换过程。

sc.parallelize(list01).flatMap(lambda x: x.split(' ')).map(lambda x : len(x)).collect()

14. 已知data = [("001", "张明", 83, "河南"), ("002", "李四", 91, "山西"), ("003", "王五", 95, "河南"), ("004", "赵柳", 76, "河北")]

数据一共分为 4列,每一列的列名和含义如下表所示:

列名

id

name

score

province

含义

学号

姓名

分数

省份

请通过DataFrame API和SparkSQL分别编程:

(1)过滤出分数大于90的学生,并按分数由高到低显示。

df01.filter('_3>90').orderBy('_3',ascending = False).show()

df01.registerTempTable('df01_table')

sqlContext=SparkSession.builder.getOrCreate()

sqlContext.sql("select * from df01_table where _3>90 order by _3 desc").show()

(2)按照省份对学生进行分组统计人数

df01.select('_4').groupby('_4').count().show()

sqlContext.sql("select _4 ,count(*) counts from df01_table group by _4").show()

四、简答题

1.请任意写出4个RDD transformation算子并说明其作用

·map()

通过对这个RDD的每个元素应用一个函数来返回一个新的RDD

·flatMap(f, preservesPartitioning=False)

将函数应用于该RDD的所有元素,然后将结果平坦化(压扁),从而返回新的RDD

·filter(f)  

对每个 元 素 应 用 f 函 数, 返 回 值 为 true 的 元 素 在RDD 中保留,  返回值为 false 的元素将被过滤掉

·distinct(numPartitions=None)

将RDD中的元素进行去重操作

·sortBy(ascending=True, numPartitions=None)

根据指定的Key进行排序

2. 请任意写出2个RDD Action算子并说明其作用

collect()

返回RDD中的所有元素

count()

返回RDD中的所有元素个数

3. 请任意写出4个DataFrame Tranformation算子并说明其作用

select()选择某些列

filter()条件查询

orderby()排序

distinct()去重

4. 请任意写出2个DataFrame Action算子并说明其作用

show()展示数据

head()返回数据前几项

5. Spark提供的编程语言接口有哪些?

Scala、Python、Java、R语言

6. 请根据你的理解,描述Hadoop和Spark有什么区别?

1)应用场景不同

Hadoop和Spark两者都是大数据框架,但是各自应用场景是不同的。Hadoop是一个分布式数据存储架构,它将巨大的数据集分派到一个由普通计算机组成的集群中的多个节点进行存储,降低了硬件的成本。Spark是那么一个专门用来对那些分布式存储的大数据进行处理的工具,它要借助hdfs的数据存储。

2)处理速度不同

hadoop的MapReduce是分步对数据进行处理的,从磁盘中读取数据,进行一次处理,将结果写到磁盘,然后在从磁盘中读取更新后的数据,再次进行的处理,最后再将结果存入磁盘,这存取磁盘的过程会影响处理速度。spark从磁盘中读取数据,把中间数据放到内存中,,完成所有必须的分析处理,将结果写回集群,所以spark更快。

3)容错性不同

Hadoop将每次处理后的数据都写入到磁盘上,基本谈不上断电或者出错数据丢失的情况。Spark的数据对象存储在弹性分布式数据集 RDD,RDD是分布在一组节点中的只读对象集合,如果数据集一部分丢失,则可以根据于数据衍生过程对它们进行重建。而且RDD 计算时可以通过 CheckPoint 来实现容错。

7. 请概括描述在windows/Linux/Mac(任选其一)系统下搭建Spark开发环境的流程

安装java、

安装python

安装spark

设置环境变量、

修改Log等级、

测试

8. 请描述累加器变量的作用

让多个task共同操作一份变量,主要可以进行累加操作。

9. 请描述设置检查点(Checkpoint)的作用

持久化操作仍然存在数据丢失的风险,此时可以使用checkpoint,设置一个还原点

10. 请描述使用RDD的编程步骤

step 1: 创建SparkContext对象

step 2: 通过SparkContext对象创建RDD

step 3: 对RDD进行Transformation操作(预处理)

step 4: 对RDD进行Action操作(输出结果)

11. 请描述使用DataFrame的编程步骤

step 1: 创建SparkSession对象

step 2: 通过SparkSession对象创建DataFrame

step 3: 对DataFrame进行Transformation操作(预处理)

## 通过DataFrame API 提供的方法

## 通过Spark SQL

step 4: 对DataFrame进行Action操作(输出结果)

12. 请描述通过RDD对流数据进行处理编程的步骤

根据数据源创建DStream

自定义处理逻辑

启动处理流程

等待处理结果

结束计算流程

13. 请描述通过GraphFrames库创建图实例的步骤,并至少列举出图实例的3个属性并说明其含义

(1) 创建顶点DataFrame对象:必须有id列,作为顶点的唯一标识

(2) 创建边DataFrame对象:必须有src和dst列

(3) 根据顶点和边DataFrame实例,创建图实例

vertices:顶点

edges:边

triplets:边表

degrees:顶点的度

inDegrees:入度

outDegrees:出度


http://www.ppmy.cn/news/1565054.html

相关文章

【AI工具学习14】利用文生类AI工具实现角色扮演对话1

目录 1.AI解困师 2.AI男友 3.星座大师 4.法律顾问 市面上有不少文生类 AI 工具可供选择,像 ChatGPT、文心一言、讯飞星火等。要根据自己的需求以及工具的特点来挑选,比如有的在创意写作方面表现出色,有的在逻辑回复上更胜一筹&#xff0c…

《AI语言模型的关键技术探析:系统提示、评估方法与提示工程》

文章主要内容摘要 1. 系统提示(System Prompt) 定义: 用于设置模型行为、角色和工作方式的特殊指令重要性: 定义模型行为边界影响输出质量和一致性可将通用模型定制为特定领域助手 挑战: 技术集成复杂兼容性问题效果难以精确预测 2. 模型评估方法 创新方向: 自一致性(Self…

Linux 管道操作

Linux 管道操作 在 Linux 中,管道(Pipe)是一个非常强大且常用的功能,它允许将一个命令的输出直接传递给另一个命令作为输入,从而能够高效地处理和分析数据。管道在多个命令之间建立数据流,减少了文件的读写…

C# 并发和并行的区别--16

目录 并发和并行 一.并发 定义 特点 代码示例 代码解释 二.并行 定义 特点 在C#中的体现 代码示例 代码解释 三.并发和并行的区别 四 .如何在C#中选择并发还是并行 1.考虑任务类型 2.代码示例 3.注意事项 五.总结 并发和并行 在编程领域,并发和并行是两个密切…

在Ubuntu 22.04 LTS 上安装 MySQL两种方式:在线方式和离线方式

Ubuntu安装MySQL 介绍: Ubuntu 是一款基于Linux操作系统的免费开源发行版,广受欢迎。它以稳定性、安全性和用户友好性而闻名,适用于桌面和服务器环境。Ubuntu提供了大量的软件包和应用程序,拥有庞大的社区支持和活跃的开发者社区…

【FlutterDart】MVVM(Model-View-ViewModel)架构模式例子-dio版本(31 /100)

动图更精彩 dio & http 在Flutter中,dio和http是两个常用的HTTP请求库,它们各有优缺点。以下是对这两个库的详细对比: 功能特性 http: 功能:提供了基本的HTTP请求和响应功能,如GET、POST、PUT、DELE…

初学者如何用 Python 写第一个爬虫?

💖 欢迎来到我的博客! 非常高兴能在这里与您相遇。在这里,您不仅能获得有趣的技术分享,还能感受到轻松愉快的氛围。无论您是编程新手,还是资深开发者,都能在这里找到属于您的知识宝藏,学习和成长…

Jvm垃圾回收机制与常见算法

什么是垃圾回收(GC)? 垃圾回收(Garbage Collection,简称 GC) 是编程语言运行时环境自动管理内存的一种机制。它的主要目的是自动释放不再使用的对象所占用的内存空间,从而避免内存泄漏和手动管…