一、單選題
1. 下面的端口不是 Spark 自帶的服務(wù)端口的是___________。
A. 8080 B. 4040?C. 8090?D. 18080
2. 下面的描述不是 RDD 的特點(diǎn)的是___________。
A. 可分區(qū) B. 可序列化?C. 可修改?D. 可持久化
3. 關(guān)于廣播變量的描述錯(cuò)誤的是___________。
A. 任何函數(shù)調(diào)用 B. 是只讀的
C. 存儲(chǔ)在各個(gè)節(jié)點(diǎn) D. 存儲(chǔ)在磁盤或 HDFS?
4. 在啟動(dòng) pyspark 交互式界面時(shí),采用默認(rèn)的不指定參數(shù)的啟動(dòng)方式屬于___________部署方式。
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 持久化默認(rèn)的存儲(chǔ)級別是___________。
A. MEMORY_ONLY?B. MEMORY_ONLY_SER
C. MEMORY_AND_DISK D. MEMORY_AND_DISK_SER
8. DataFrame 和 RDD 的最大的區(qū)別是___________。
A. 科學(xué)統(tǒng)計(jì)支持 B. 多了 schema?C. 存儲(chǔ)方式不一樣 D. 外部數(shù)據(jù)源支持
9. 與 spark 日志相關(guān)的配置文件是___________。
A. spark-env.sh B. log4j.properties?C. slaves D. profile
10. spark 機(jī)器學(xué)習(xí)庫有兩種,其中 ml 庫是基于___________數(shù)據(jù)結(jié)構(gòu)的 API。
A. Spark SQL B. DataFrame?C. Spark Streaming D. RDD
11. 關(guān)于累加器,下列描述錯(cuò)誤的是___________。
A. 支持加法 B. 支持?jǐn)?shù)值類型 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創(chuàng)建出臨時(shí)表,才能使用SQL語句的是?___________。
A.Spark SQL B.DataFrame
C.Spark Streaming D.GraphX
16.以下哪項(xiàng)是由一系列RDD構(gòu)成的?___________。
A.StreamingContext B.DStream
C.Spark Streaming D.DAG
17.哪個(gè)選項(xiàng)提供常用的學(xué)習(xí)算法,如分類、回歸、聚類等算法?___________。
A.Utilities B.Featurization
C.Pipelines D.ML Algorithms
18.下列RDD操作以數(shù)組的形式返回?cái)?shù)據(jù)集的所有元素的是?___________。
A.reduce B.count
C.collect D.first
19.含有自環(huán)的圖被稱為?___________。
A.多重圖 B.偽圖
C.二分圖 D.連通圖
20. 在不改變原有 Key 鍵的基礎(chǔ)上,對 Key-Value 結(jié)構(gòu) RDD 的 Vaule 值進(jìn)行
一個(gè) map 操作,分區(qū)保持不變。這種操作使用的算子是___________。
- mapValues B. flatMapValues
C. combineByKey D. reduceByKey
21. Spark SQL 的創(chuàng)建需要依賴于___________。
A. Spark RDD B. spark DataFrame
C. Spark Streaming D. GraphX
22. Spark Streaming 提供的基礎(chǔ)抽象是___________,它表示一系列的數(shù)據(jù)流。
A. StreamingContext B. Discretized Streams
C. Spark Streaming D. RDD
23. Spark 機(jī)器學(xué)習(xí)庫 ml 中,提供用于構(gòu)建,評估和調(diào)整 ML Pipelines 的工具是___________。
A. ML Algorithms B. Featurization
C. Pipelines D. Utilities
24. 下列 RDD 算子中,屬于 transform 算子的是___________。
A. collect B. reduce
C. foreach D. union
25.下列RDD操作哪一個(gè)返回結(jié)構(gòu)的類型不是以數(shù)組形式的?___________。
A.first B.top
C.collect D.take
26.Spark的四大組件中不包括下列哪個(gè)選項(xiàng)?___________。
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主要有幾個(gè)特點(diǎn)?___________。
A.3 B.4 ???????
C.5 D.6
29.Spark的運(yùn)行環(huán)境搭建不依賴于?___________。
A.Java B.Scala
C.Spark D.Python
30.哪個(gè)選項(xiàng)以 RDD 為基礎(chǔ)并將數(shù)據(jù)整理成表格形式?___________。
A.Spark SQL B.DataFrame
C.Spark Streaming D.GraphX
31.下列選項(xiàng)屬于DStream輸出操作的是?___________。
A.map B.flatMap
C.reduceByKey D.pprint
32. 下列方法可以對 Spark RDD 進(jìn)行持久化的是___________。
A. persist B. save
C. print D. collect
33.哪個(gè)選項(xiàng)是Spark為Python開發(fā)者提供的API?___________。
A.PySpark B.Python Spark
C.Scala D.Spark SQL
34.進(jìn)入web監(jiān)控頁面看到Spark Master at spark://host:port,屬于哪種啟動(dòng)模式?___________。
A.local B.mesos
C.yarn D.standalone
35.哪個(gè)選項(xiàng)是Spark最基礎(chǔ)最核心的部分?___________。
A.Spark Streaming B.Spark SQL
C.RDD D.MLlib
二、填空題
1.mllib是基于RDD的api,ml是基于?DataFrame ??的api。
2. 根據(jù)代碼填空:
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 運(yùn)行模式是___Standalone____;日志級別是____WARN____;變量名為 dist 的這個(gè) RDD 變量有___3__分區(qū)(partition);代碼 dist2.persist()的作用是__統(tǒng)計(jì)文件中字符數(shù)量_______;代碼dist3.collect()的輸出結(jié)果是__[(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)的運(yùn)行結(jié)果分別為?[21,17,19,4] [22,21,19,17,15]?????????。
4.根據(jù)代碼填空:?
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)
上述代碼的目的是__統(tǒng)計(jì)一個(gè)RDD中有多少元素為空__;使用的共享變量是__accumulator______,該共享變量的變量名是__blanks____;代碼 len(line)的含義是__line的長度_____;最后一句代碼print(blanks.value)的輸出結(jié)果是_4_____。
5.RDD算子包括??transform算子????和action算子(執(zhí)行算子)兩種類型。
6. 根據(jù)代碼填空:
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__;假設(shè) a.collect()的結(jié)果是[3,2,1,0],則代碼 d.collect()的輸出結(jié)果是_[3,2,1,0,3,2,1,0,3,2,1,0,3,2,1,0]___;代碼 c.unpersist()的作用是__解除廣播變量的持久化操作_______。
- 簡答題
- 如何理解 Spark RDD 中的血統(tǒng)概念。
RDD只支持粗粒度轉(zhuǎn)換,即在大量記錄上執(zhí)行單個(gè)操作。RDD的血統(tǒng)(Lineage)會(huì)記錄 RDD的元數(shù)據(jù)信息和轉(zhuǎn)換行為,當(dāng)該RDD自內(nèi)部分分區(qū)數(shù)據(jù)丟失時(shí),它可以根據(jù)這些信息重新運(yùn)算并恢復(fù)丟失的分區(qū)數(shù)據(jù)。
- 請寫出 Spark RDD 的四種創(chuàng)建方式。
1).從集合中創(chuàng)建RDD,Spark主要提供了兩個(gè)方法:parallelize和makeRDD?
2).從外部存儲(chǔ)文件創(chuàng)建RDD
3).從其它RDD創(chuàng)建
4).直接創(chuàng)建RDD(new)?
5).基于Nosql創(chuàng)建rdd,如hbase
6).基于s3創(chuàng)建rdd,
7).基于數(shù)據(jù)流,如socket創(chuàng)建rdd
- 簡述 Spark Streaming 獲取數(shù)據(jù)的方式,并寫出其使用的方法。
- socket獲取,socketTextStream()
- HDFS獲取,textFileStream()
- Kafka獲取,pyspark.streaming.kafka.KafkaUtils
- Flume獲取,pyspark.streaming.flume.flumeUtils
- 簡述 Spark 中廣播變量基本原理和用途。
- 請簡述Spark SQL與DataFrame的區(qū)別與聯(lián)系?
區(qū)別:RDD是分布式的java對象的集合,但是對象內(nèi)部結(jié)構(gòu)對于RDD而言卻是不可知的。DataFrame是一種以RDD為基礎(chǔ)的分布式數(shù)據(jù)集,提供了詳細(xì)的結(jié)構(gòu)信息,相當(dāng)于關(guān)系數(shù)據(jù)庫中的一張表
聯(lián)系1.都是spark平臺(tái)下的分布式彈性數(shù)據(jù)集,為處理超大型數(shù)據(jù)提供便利2、都有惰性機(jī)制,在進(jìn)行創(chuàng)建、轉(zhuǎn)換,如map方法時(shí),不會(huì)立即執(zhí)行,只有在遇到Action才會(huì)運(yùn)算3.都會(huì)根據(jù)spark的內(nèi)存情況自動(dòng)緩存運(yùn)算,這樣即使數(shù)據(jù)量很大,也不用擔(dān)心會(huì)內(nèi)存溢出4、三者都有partition的概念5.三者有許多共同的函數(shù),如filter,排序等
6.請簡述SparkStreaming的工作原理?
SparkStreaming從數(shù)據(jù)流接受實(shí)時(shí)數(shù)據(jù)流,并將數(shù)據(jù)分為若干批,然后由spark引擎進(jìn)行處理,最后批量生成結(jié)果流。
7.spark運(yùn)行模式有哪些,并簡要說明每種運(yùn)行模式?
local模式:spark單機(jī)運(yùn)行,一般用于開發(fā)測試。
standalone模式:構(gòu)建一個(gè)由Master+Slave構(gòu)成的Spark集群,Spark運(yùn)行在集群中。
spark on Yarn模式:Spark客戶端直接連接Yarn,不需要額外構(gòu)建Spark集群。
spark on Mesos模式:Spark客戶端直接連接Mesos,不需要額外構(gòu)建Spark集群。
8.請列舉7個(gè) Spark RDD 的action算子,并簡述功能。
答:
reduce(f):通過指定的聚合方法對 RDD 中的元素進(jìn)行聚合操作。
collect():返回一個(gè)包含 RDD 所有元素的列表。
count():統(tǒng)計(jì) RDD 中元素的個(gè)數(shù)。
take(n):獲取 RDD 中前 n 個(gè)元素的值,返回的結(jié)果為列表類型。
first():返回 RDD 中的第一個(gè)元素,返回的數(shù)據(jù)類型為元素類型。
top(n):返回 RDD 中最大的前 n 個(gè)元素,返回的結(jié)果為列表類型。
saveAsTextFile():將 RDD 中的元素以字符串的格式存儲(chǔ)于文件系統(tǒng)中。
foreach(f):遍歷 RDD 中的每個(gè)元素,同時(shí)通過傳遞自定義的處理函數(shù) f,對 RDD 中的每個(gè)元素進(jìn)行處理。
foreachPartition(f):遍歷 RDD 的 每個(gè)分區(qū),同時(shí)通過傳遞的 f 對每個(gè)分區(qū)進(jìn)行操作。
9.列舉7個(gè)Spark RDD 的transformation 算子,并簡述功能。
答:
map:對RDD中的數(shù)據(jù)逐條進(jìn)行映射,可以是類型轉(zhuǎn)換,也可是值轉(zhuǎn)換。
flatMap:先對RDD中的所有元素進(jìn)行map操作,然后將結(jié)果平坦化。
filter:按照指定條件對RDD中的元素進(jìn)行過濾。
union:將兩個(gè)RDD求并集,并返回一個(gè)新的RDD。
intersection:將兩個(gè)RDD求交集,并返回一個(gè)新的RDD,其輸出不包含任何重復(fù)元素。
sortBy:通過指定key對RDD中的元素進(jìn)行排序。
mapPartitions:對RDD的每個(gè)分區(qū)進(jìn)行map運(yùn)算。
四、編程題
1. 微博數(shù)據(jù)分析。
假設(shè)有一個(gè)數(shù)據(jù)文件,存儲(chǔ)路徑為“/home/ubuntu/data/blogInfo.txt”,它包含如下格式的兩列數(shù)據(jù)(其中第一列和第二列都表示用戶 ID,每行數(shù)據(jù)的含義是第一列的用戶關(guān)注了第二列的用戶。數(shù)據(jù)使用“\t”分隔符隔開):
數(shù)據(jù)示例:
11111111 12743457
11111111 16386587
11111112 12356363
現(xiàn)使用 pyspark 交互式界面,請使用 Spark RDD 的相關(guān)知識編寫代碼回答下列問題:
(1)將數(shù)據(jù)讀成 RDD 格式。
(2)統(tǒng)計(jì)一共有多少個(gè)不同的用戶 ID。
(3)統(tǒng)計(jì)出每個(gè)用戶的粉絲數(shù)量。
(4)將步驟(3)的結(jié)果寫入到 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. 網(wǎng)頁流量日志分析。
假設(shè)有一個(gè)數(shù)據(jù)文件,存儲(chǔ)路徑為“/home/ubuntu/data/log.txt”,它包含如下格式的三列數(shù)據(jù)(其中第一列表示訪問時(shí)間,第二列表示網(wǎng)頁名稱,第三列表示訪問次數(shù)。數(shù)據(jù)使用“\t”分隔符隔開):
數(shù)據(jù)示例:
time name num
20200501 baidu 2
20200501 sina 3
20200502 qq 3
20200502 baidu 5
現(xiàn)使用 pyspark 交互式界面,請使用 Spark SQL 的相關(guān)知識編寫代碼回答下列問題:
(1)將數(shù)據(jù)讀成 DataFrame 類型,列名分別為“time”、“name”和“num”。
(2)將數(shù)據(jù)注冊為 SQL 表,表名為“l(fā)og”。
(3)統(tǒng)計(jì)同一天里同一網(wǎng)頁的總訪問量。
(4)統(tǒng)計(jì)每個(gè)網(wǎng)頁的總訪問量,并按照總訪問量降序排序。
答
(1)data = spark.read.load(“/home/ubuntu/data/log.txt”, format =”csv”, sep=”\t”, header=True)?
(2)data.registerTempTable(“l(fā)og”)?
(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. 員工數(shù)據(jù)分析。
假設(shè)有員工數(shù)據(jù),存儲(chǔ)路徑為
“/home/ubuntu/data/employee.json”,其數(shù)據(jù)格式如下:
{“id”: 1,“name”: “Ella”, “age”: 36}
{“id”: 2,“name”: “Bob”, “age”: 29}
{“id”: 3, “name”: “Jim”, “age”: 28}
假設(shè)編程環(huán)境為 pyspark 交互式界面,請使用 Spark DataFrame 的相關(guān)知識編寫代碼回答下列問題:
(1)將數(shù)據(jù)加載為 DataFrame 格式。
(2)查詢所有數(shù)據(jù),并刪除重復(fù)的數(shù)據(jù)。
(3)將數(shù)據(jù)按照 name 升序排列。
(4)將數(shù)據(jù)保存為 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 計(jì)算。
現(xiàn)通過本地的 9999 端口發(fā)送日志流數(shù)據(jù),數(shù)據(jù)格式如下(數(shù)據(jù)中有三個(gè)字段,含義分別為:訪問網(wǎng)址,訪問流量,訪問時(shí)間戳。各字段使用“,”隔開):
數(shù)據(jù)示例:
www.baidu.com,12853,2586213654
假設(shè)編程環(huán)境為 pyspark 交互式界面,請使用 Spark Streaming 的相關(guān)知識編寫代碼回答下列問題:
(1)創(chuàng)建一個(gè) DStream,監(jiān)聽該端口的數(shù)據(jù),時(shí)間間隔為 5 秒。(提示:注意導(dǎo)入 streaming 包和上下文的創(chuàng)建)
(2)使用有狀態(tài)轉(zhuǎn)換 updateStateByKey 統(tǒng)計(jì)每個(gè)網(wǎng)站的總訪問流量。 文章來源:http://www.zghlxwxcb.cn/news/detail-424736.html
轉(zhuǎn)發(fā)標(biāo)明出處文章來源地址http://www.zghlxwxcb.cn/news/detail-424736.html
到了這里,關(guān)于Spark期末考試練習(xí)題的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!