Spark期末考试练习题

一、单选题

1. 下面的端口不是 Spark 自带的服务端口的是___________。

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

2. 下面的描述不是 RDD 的特点的是___________。

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

3. 关于广播变量的描述错误的是___________。

A. 任何函数调用 B. 是只读的

C. 存储在各个节点 D. 存储在磁盘或 HDFS 

4. 在启动 pyspark 交互式界面时,采用默认的不指定参数的启动方式属于___________部署方式。

A. standalone B. Spark on mesos

C. Spark on YARN  D. Spark on local

5. pyspark 中,Spark DataFrame 和 Spark SQL 的上下文入口是___________。

A.pyspark.SparkConf B. pyspark.SparkSession 

C. pyspark.SparkContext D. pyspark.StreamingContext

6. 下面的操作中,___________肯定是宽依赖。

A. map B. flatMap C. reduceByKey D. sample

7. Spark 持久化默认的存储级别是___________。

A. MEMORY_ONLY B. MEMORY_ONLY_SER

C. MEMORY_AND_DISK D. MEMORY_AND_DISK_SER

8. DataFrame 和 RDD 的最大的区别是___________。

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

9. 与 spark 日志相关的配置文件是___________。

A. spark-env.sh B. log4j.properties C. slaves D. profile

10. spark 机器学习库有两种,其中 ml 库是基于___________数据结构的 API。

A. Spark SQL B. DataFrame C. Spark Streaming D. RDD

11. 关于累加器,下列描述错误的是___________。

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

12. 下面操作属于窄依赖的是___________。

A. join B. filter C. group D. sort

13. pyspark 中,Spark RDD 的上下文入口是___________。

A. pyspark.SparkConf B. pyspark.SparkSession

C. pyspark.SparkContext D. pyspark.StreamingContext

14. pyspark 中,提供广播变量的操作方法的类是___________。

A. pyspark.SparkConf B. pyspark.Accumulator

C. pyspark.RDD D. pyspark.Broadcast

15.需要基于DataFrame创建出临时表,才能使用SQL语句的是?___________。

A.Spark SQL B.DataFrame

C.Spark Streaming D.GraphX

16.以下哪项是由一系列RDD构成的?___________。

A.StreamingContext B.DStream

C.Spark Streaming D.DAG

17.哪个选项提供常用的学习算法,如分类、回归、聚类等算法?___________。

A.Utilities B.Featurization

C.Pipelines D.ML Algorithms

18.下列RDD操作以数组的形式返回数据集的所有元素的是?___________。

A.reduce B.count

C.collect D.first

19.含有自环的图被称为?___________。

A.多重图 B.伪图

C.二分图 D.连通图

20. 在不改变原有 Key 键的基础上,对 Key-Value 结构 RDD 的 Vaule 值进行

一个 map 操作,分区保持不变。这种操作使用的算子是___________。

  1. mapValues B. flatMapValues

C. combineByKey D. reduceByKey

21. Spark SQL 的创建需要依赖于___________。

A. Spark RDD B. spark DataFrame

C. Spark Streaming D. GraphX

22. Spark Streaming 提供的基础抽象是___________,它表示一系列的数据流。

A. StreamingContext B. Discretized Streams

C. Spark Streaming D. RDD

23. Spark 机器学习库 ml 中,提供用于构建,评估和调整 ML Pipelines 的工具是___________。

A. ML Algorithms B. Featurization

C. Pipelines D. Utilities

24. 下列 RDD 算子中,属于 transform 算子的是___________。

A. collect B. reduce

C. foreach D. union

25.下列RDD操作哪一个返回结构的类型不是以数组形式的?___________。

A.first B.top

C.collect D.take

26.Spark的四大组件中不包括下列哪个选项?___________。

A.Spark Streaming B.MLlib

C.Spark R D.GraphX

27.Spark为包含键值对(key-value)类型的RDD提供了一些专有的操作。这些RDD被称为___________。

A.PairRDD B.KeyRDD

C.key-value RDD D.Value RDD

28.Spark主要有几个特点?___________。

A.3 B.4        

C.5 D.6

29.Spark的运行环境搭建不依赖于?___________。

A.Java B.Scala

C.Spark D.Python

30.哪个选项以 RDD 为基础并将数据整理成表格形式?___________。

A.Spark SQL B.DataFrame

C.Spark Streaming D.GraphX

31.下列选项属于DStream输出操作的是?___________。

A.map B.flatMap

C.reduceByKey D.pprint

32. 下列方法可以对 Spark RDD 进行持久化的是___________。

A. persist B. save

C. print D. collect

33.哪个选项是Spark为Python开发者提供的API?___________。

A.PySpark B.Python Spark

C.Scala D.Spark SQL

34.进入web监控页面看到Spark Master at spark://host:port,属于哪种启动模式?___________。

A.local B.mesos

C.yarn D.standalone

35.哪个选项是Spark最基础最核心的部分?___________。

A.Spark Streaming B.Spark SQL

C.RDD D.MLlib

二、填空题

1.mllib是基于RDD的api,ml是基于 DataFrame   的api。

2. 根据代码填空:

sc=SparkContext("spark://10.92.16.21:7077","app")

sc.setLogLevel("WARN")

data =[1,2,3,4,5,6]

dist =sc.paralellize(data,3)

dist2 =rdd.map(lambda x:x*2)

dist2.persist()

dist3 =dist.intersection(dist2)

dist3.collect()

上述代码使用的 Spark 运行模式是___Standalone____;日志级别是____WARN____;变量名为 dist 的这个 RDD 变量有___3__分区(partition);代码 dist2.persist()的作用是__统计文件中字符数量_______;代码dist3.collect()的输出结果是__[(1,2),(2,4),(3,6),(4,8),(5,10),(6,12)] 

3.已知rdd=sc.parallelize([21,17,19,4,15,6,22]),则rrd.take(4)和rrd.top(5)的运行结果分别为 [21,17,19,4] [22,21,19,17,15]         

4.根据代码填空: 

file =sc.parallelize(["1","2","","3","","4","","","5"])

blanks =sc.accumulator(0)

def countblanks(line):

global blanks

if(len(line) ==0):

blanks +=1

return line

file.map(countblanks).collect()

print(blanks.value)

上述代码的目的是__统计一个RDD中有多少元素为空__;使用的共享变量是__accumulator______,该共享变量的变量名是__blanks____;代码 len(line)的含义是__line的长度_____;最后一句代码print(blanks.value)的输出结果是_4_____。

5.RDD算子包括  transform算子    和action算子(执行算子)两种类型。

6. 根据代码填空:

a =sc.textFile(“/root/index.txt”)

b =a.collect()

c =sc.broadcast(b)

d =sc.parallelize([0,0,0,0]).flatMap(lambda x: c.value)

d.collect()

c.unpersist()

上述代码使用的共享变量是__broadcast_____;该共享变量的变量名为_c__;查看该共享变量的值的方法是_c.value__;假设 a.collect()的结果是[3,2,1,0],则代码 d.collect()的输出结果是_[3,2,1,0,3,2,1,0,3,2,1,0,3,2,1,0]___;代码 c.unpersist()的作用是__解除广播变量的持久化操作_______。

  • 简答题
  1. 如何理解 Spark RDD 中的血统概念。

RDD只支持粗粒度转换,即在大量记录上执行单个操作。RDD的血(Lineage)会记录 RDD的元数据信息和转换行为,当该RDD自内部分分区数据丢失时,它可以根据这些信息重新运算并恢复丢失的分区数据。

  1. 请写出 Spark RDD 的四种创建方式。

1).从集合中创建RDD,Spark主要提供了两个方法:parallelize和makeRDD 

2).从外部存储文件创建RDD
3).从其它RDD创建
4).直接创建RDD(new) 
5).基于Nosql创建rdd,如hbase
6).基于s3创建rdd,
7).基于数据流,如socket创建rdd

  1. 简述 Spark Streaming 获取数据的方式,并写出其使用的方法。
  1. socket获取,socketTextStream()
  2. HDFS获取,textFileStream()
  3. Kafka获取,pyspark.streaming.kafka.KafkaUtils
  4. Flume获取,pyspark.streaming.flume.flumeUtils

  1. 简述 Spark 中广播变量基本原理和用途。

  1. 请简述Spark SQL与DataFrame的区别与联系?

区别:RDD是分布式的java对象的集合,但是对象内部结构对于RDD而言却是不可知的。DataFrame是一种以RDD为基础的分布式数据集,提供了详细的结构信息,相当于关系数据库中的一张表

联系1.都是spark平台下的分布式弹性数据集,为处理超大型数据提供便利2、都有惰性机制,在进行创建、转换,如map方法时,不会立即执行,只有在遇到Action才会运算3.都会根据spark的内存情况自动缓存运算,这样即使数据量很大,也不用担心会内存溢出4、三者都有partition的概念5.三者有许多共同的函数,如filter,排序等

6.请简述SparkStreaming的工作原理?

SparkStreaming从数据流接受实时数据流,并将数据分为若干批,然后由spark引擎进行处理,最后批量生成结果流。

7.spark运行模式有哪些,并简要说明每种运行模式?

local模式:spark单机运行,一般用于开发测试。

standalone模式:构建一个由Master+Slave构成的Spark集群,Spark运行在集群中。

spark on Yarn模式:Spark客户端直接连接Yarn,不需要额外构建Spark集群。

spark on Mesos模式:Spark客户端直接连接Mesos,不需要额外构建Spark集群。

8.请列举7Spark RDD action算子,并简述功能。

答:

reduce(f):通过指定的聚合方法对 RDD 中的元素进行聚合操作。

collect():返回一个包含 RDD 所有元素的列表。

count():统计 RDD 中元素的个数。

take(n):获取 RDD 中前 n 个元素的值,返回的结果为列表类型。

first():返回 RDD 中的第一个元素,返回的数据类型为元素类型。

top(n):返回 RDD 中最大的前 n 个元素,返回的结果为列表类型。

saveAsTextFile():将 RDD 中的元素以字符串的格式存储于文件系统中。

foreach(f):遍历 RDD 中的每个元素,同时通过传递自定义的处理函数 f,对 RDD 中的每个元素进行处理。

foreachPartition(f):遍历 RDD 的 每个分区,同时通过传递的 f 对每个分区进行操作。

9.列举7个Spark RDD 的transformation 算子,并简述功能。

答:

map:对RDD中的数据逐条进行映射,可以是类型转换,也可是值转换。

flatMap:先对RDD中的所有元素进行map操作,然后将结果平坦化。

filter:按照指定条件对RDD中的元素进行过滤。

union:将两个RDD求并集,并返回一个新的RDD

intersection:将两个RDD求交集,并返回一个新的RDD,其输出不包含任何重复元素。

sortBy:通过指定keyRDD中的元素进行排序。

mapPartitions:对RDD的每个分区进行map运算。

四、编程题

1. 微博数据分析。

假设有一个数据文件,存储路径为“/home/ubuntu/data/blogInfo.txt”,它包含如下格式的两列数据(其中第一列和第二列都表示用户 ID,每行数据的含义是第一列的用户关注了第二列的用户。数据使用“\t”分隔符隔开):

数据示例:

11111111 12743457

11111111 16386587

11111112 12356363

现使用 pyspark 交互式界面,请使用 Spark RDD 的相关知识编写代码回答下列问题:

(1)将数据读成 RDD 格式。

(2)统计一共有多少个不同的用户 ID。

(3)统计出每个用户的粉丝数量。

(4)将步骤(3)的结果写入到 HDFS 文件中(具体路径为:hdfs://linux01:9000/out/result.txt)。

(1)Lines = sc.textFile(“/home/ubuntu/data/blogInfo.txt”)  
(2)Data = lines.flatMap(lambda x:x.split(“\t”)) 
Result = data.distinct().count() 
(3)Data3 = lines.map(lambda x: x.split(\t)[1]) 
Result3 = data3.map(lambda x: (x,1)).reduceByKey(lambda x,y: x+y).collect() 
(4)Result3.saveAsTextFile(hdfs://linux01:9000/out/result.txt) 

2. 网页流量日志分析。

假设有一个数据文件,存储路径为“/home/ubuntu/data/log.txt”,它包含如下格式的三列数据(其中第一列表示访问时间,第二列表示网页名称,第三列表示访问次数。数据使用“\t”分隔符隔开):

数据示例:

time name num

20200501 baidu 2

20200501 sina 3

20200502 qq 3

20200502 baidu 5

现使用 pyspark 交互式界面,请使用 Spark SQL 的相关知识编写代码回答下列问题:

1)将数据读成 DataFrame 类型,列名分别为“time”“name”“num”

2)将数据注册为 SQL 表,表名为“log”

3)统计同一天里同一网页的总访问量。

4)统计每个网页的总访问量,并按照总访问量降序排序。

(1)data = spark.read.load(“/home/ubuntu/data/log.txt”, format =”csv”, sep=”\t”, header=True) 
(2)data.registerTempTable(“log”) 
(3)spark.sql(“select time,name,sum(num) from log groupby time,name”).show() 
(4)sql = “select name,sum(num) fangwenliang from log groupby name order by fangwenliang desc” 
spark.sql(sql).show()

3. 员工数据分析。

假设有员工数据,存储路径为

“/home/ubuntu/data/employee.json”,其数据格式如下:

{“id”: 1,“name”: “Ella”, “age”: 36}

{“id”: 2,“name”: “Bob”, “age”: 29}

{“id”: 3, “name”: “Jim”, “age”: 28}

假设编程环境为 pyspark 交互式界面,请使用 Spark DataFrame 的相关知识编写代码回答下列问题:

(1)将数据加载为 DataFrame 格式。

(2)查询所有数据,并删除重复的数据。

(3)将数据按照 name 升序排列。

(4)将数据保存为 parquent 格式,仍旧保存在/home/ubuntu/data/目录下。

答: 
(1) employee = spark.read.json(“/home/ubuntu/data/employee.json”) 
(2) employee.select(“id”,”name”,”age”).distinct().show() 
(3) employee.select(“id”,”name”,”age”).orderBy(“name”).show() 
(4) employee.write.save(“/home/ubuntu/data/employee.paquent”) 

4. Spark Streaming 计算。

现通过本地的 9999 端口发送日志流数据,数据格式如下(数据中有三个字段,含义分别为:访问网址,访问流量,访问时间戳。各字段使用“,”隔开):

数据示例:

www.baidu.com,12853,2586213654

假设编程环境为 pyspark 交互式界面,请使用 Spark Streaming 的相关知识编写代码回答下列问题:

(1)创建一个 DStream,监听该端口的数据,时间间隔为 5 秒。(提示:注意导入 streaming 包和上下文的创建)

(2)使用有状态转换 updateStateByKey 统计每个网站的总访问流量。

转发标明出处

你可能感兴趣的:(Spark,spark,big,data,大数据)