《Spark编程基础及项目实践题库练习题集带答案(高职).docx》由会员分享,可在线阅读,更多相关《Spark编程基础及项目实践题库练习题集带答案(高职).docx(19页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、Spark编程基础及项目实践题库练习题集带答案习题1.选择题(1)下列哪个不是大数据的特征? ( D )A. VolumeB. VarietyC. VelocityD. Variance(2)下列不属于大数据技术的是(C )。A.大数据采集技术B.大数据存储及管理技术C.财务报表分析技术D.大数据分析及挖掘技术(3)下列不属于Spark生态系统的是(BA. Spark StreamingB. StormC. Shark SQLD. Spark R(4)下列适合Spark大数据处理场景的是(D )。A.复杂的批处理B.基于历史数据的交互式查询C.基于实时数据流的数据处理D. PB级的数据存储(5
2、)下列不是Spark的部署模式的是(C )。A.单机式B.单机伪分布式C.列分布式D.完全分布式2.操作题使用Hadoop用户名登录Linux系统,启动Hadop,使用Hadoop提供的Shell完成如下 操作:(1)在Linux系统的本地文件系统的“/home/hadoop”目录下新建一个文本文件test.txt, 并在该文件中随意输入一些内容,然后上传到HDFS的/data/input”目录下。$vi /home/hadoop/test.txt$ hdfs dfs -put /home/hadoop/test.txt /data/input/(2)在spark-shell中读取Linux系
3、统的本地文件“/home/hadoop/test.txt”,然后统计出文 件的行数。D.Set中可以有重复对象且Set中元素是有序的(4)关于函数:def sum(args:Int * ) : Int= var r: Int=Ofor(arg return x-yC. def addFun(x:lnt)(y:lnt) = x * yD. val add = (a:Doublez b:Double) = a + b(8)表达式 “for(i-lto3;j-lto3;ifi !=j)print(i + j)+“”)的”输出结果是(A. 3 4 3 5 4 5B. 1 2 3 4 5 6C. 24
4、6D.124 6(9)有如下函数定义。def fac(n: Int) : Int= var res=Ofor(i -l to n) res+= i则fac的输出结果是(B )。A. 14B. 15C. 0D. 5(10)类和单例对象间的差别是(B )oA.单例对象不可以定义方法,而类可以B.单例对象不可以带参数,而类可以C.单例对象不可以定义私有属性,而类可以D,单例对象不可以继承,而类可以3.编程题(1)编写函数来测试单词是否是回文,若是,则打印出该单词。回文是只正向和逆向读起 来相同的词,如“eye”和“level”。def palind_str(word:String):Unit = i
5、f(word = wo rd. re verse) println(word)测试函数palind_str(eye)(2)打印出九九乘法表。for(i -1 to 9; j join take(4)下面哪种按键操作的方法返回值可以与输入类型不同?( B )A. reduceByKeyB.combineByKeyC. sortByKeyD.groupByKey(5)使用saveAsTextFile存储数据到HDFS,要求数据类型为什么? ( D )A. ListB.ArrayC. Seq D.RDD2.操作题现有数据文件words.txt如图4-8所示,文件中包含了多行句子,现在要求对文 档中的
6、单词计数,并把单词计数超过3的结果存储到HDFS上。WHat is going on there?I talked to John on email. We talked about some computer stuff thats it.I went bike riding in the rain, it was not that cold.We went to the museum in SF yesterday it was $3 to get in and they had free food. At the same time was a SF Giants game, when
7、we got done we had to take the train with all the Giants fans, they are 1/2 drunk.图 4-8 words.txt通过textfile的方法读取数据。(2)通过flatMap将字符串切分成单词。(3)通过map将单词转化为(单词,1)的形式。通过reduceByKey将同一个单词的所有值相加。通过filter将单词计数大于3的结果过滤出来。通过saveAsTextFile将结果写入到HDFS。答案:(1) val test = sc.textFile(7user/root/words.txt)(2) test.fl
8、atMap(x=x.split().collect(3) test.map(lambda word : (word)(4) testl = test.reduceByKey(lambda a,b :a+b)(5) test2=testl.filter(x=x._2l).collect(6) test2. saveAsTextFile(/user/data)习题54.选择题(2 ) Spark SQL可以处理数据源包括哪些? ( D )C. Hive 表C.数据文件、Hive表、RDD D.(2)下列说法正确的是(CA. Spark SQL 的前身是 HiveC. HiveContext 继承
9、了 SqlContextC. Hive 表C.数据文件、Hive表、RDD D.(2)下列说法正确的是(CA. Spark SQL 的前身是 HiveC. HiveContext 继承 了 SqlContextC. Hive 表C.数据文件、Hive表、RDD D.(2)下列说法正确的是(CA. Spark SQL 的前身是 HiveC. HiveContext 继承 了 SqlContextB.数据文件、Hive表数据文件、Hive表、RDD、外部数据库 )oB. DataFrame 其实就是 RDDD. HiveContext只支持SQL语法解析器(3)如何查看DataFrame对象的前1
10、0条记录?( C )A. df.showf)B. df.show(false)C. df.show(lO)D. df.collectf)(4) DataFrame查询指定字段数据信息的方法有哪些? ( B )selectselectExprcolapplyA.B. C.D.(5) DataFrame的groupBy方法返回的结果是什么类型? ( D )A. DataFrameB.ColumnC.GroupedDataD.RDD2.操作题某航空公司积累了大量的会员档案信息和其乘坐航班记录。其中包括了会员卡 号、入会时间、性别、年龄、会员卡级别、工作地城市、工作地所在省份、积分、 飞行千米数、飞行
11、次数、飞行时间、平均折扣率等信息。如图5-43所示。member.nonp_datefrst_fhQht_dategenderftpjlerwortc_citywork_provmceworK.countryageloadjime549932006- 11-22008-12-24美6-北京CN31.02014-3-31280652007-2-192007-8-3s6NaN3集CN42.02014-3-31551062007212007-8-30男6-北京CN40.02014-3-31211892008-8-222008-8-23s5Los AngelesCAUS64.02014-3-31395
12、462009-4-102009-4-15男6CN4802014-3-31569722008-2-102009-9-29s6广州CN64.02014-3-314492420063222006-3-29556乌鲁木齐市CN46.02014-3-31226312010-4-92010-4-9女6漫外市浙江CN50.02014-3-31321972011672011-7-1英5DRANCYNaNFR50.020U-3-31316452010-7-52010-7-5女6鼾浙工CN43.02014-3-31588772010- 11-182010-11-20女6PARISPARISFR34.020U-3-
13、31图5-43航空公司信息数据导入数据表。统计SUM_YR_1、SEG_KM_SUM字段的空值记录数,保存到null_count表。统计SUM_YR_1、SEG_KM_SUM字段的最小值,保存到min_count表。统计SUM_YR_1、SEG_KM_SUM字段的最大值,保存到max_count表。计算SUM_YR_1、SEG_KM_SUM字段的平均值。答案:(1) val class Person(SUM_YR_l:int, SEG_KM_SUM:int)val data = sc.textFile(/user/root/test.txt)val person=data.map(p=Pers
14、on(p(0),p(l).trim.tolnt),toDF()(2) df.select(,SUM_YR_l).count(null)resultDF.write.jdbc(jdbc:mysql:/192.168.1.150:3306/spark,7null_countt)df.select(SEG_KM_SUM).count(null)resultDF.write.jdbc(jdbc:mysql:/192.168.1.150:3306/spark,null_countt)(3) df.select(SUM_YR_l).min()resultDF.write.jdbc(jdbc:mysql:/
15、192.168.1.150:3306/spark,min_count)df.select(SEG_KM_SUM). min()resultDF.write.jdbc(jdbc:mysql:/192.168.1.150:3306/spark,min_count)(4) df.select(SUM_YR_l).max()resultDF.write.jdbc(jdbc:mysql:/192.168.1.150:3306/spark,;max_count)df.select(SEG_KM_SUM). max()resultDF.write.jdbc(jdbc:mysql:/192.168.1.150
16、:3306/spark,max_count)(5) df.select(,SUM_YR_l).avg()df.select(SEG_KM_SUM). avg()习题6答案.选择题(1)下列哪个不可以作为Spark Streaming的输入数据流? ( D )A. KafkaB. TwitterC. TCP套接字D. Openstack(2)不可以作为Spark编程语言的是(CA. JavaB. ScalaC. RubyD. PythonDstream的转换操作中,将RDD进行聚合的操作是(B ),A. flat map()B. reduce()C. count()D. unionf)(4)下列
17、不是划窗操作重要参数是(D )。A.批处理间隔B.窗口间隔C.滑动间隔D.输入流间隔(5)下列不属于Spark Streaming的输出操作的是(BA. saveAsTextFilesB. saveAsStreamingFilesC. saveAsHadoopFilesD. saveAsObjectFiles2.操作题使用Hadoop用户名登录Linux系统,启动Spark-shell,使用Hadoop提供的Shell完成 如下操作:(1)弓I入Spark Streaming相关包,并创建一个Streaming Context对象,流计算的间隔时 长为5秒。import org.apache.
18、spark.streaming,Seconds, Streamingcontextobject WordCount def main(args: ArrayfString) = /create sparkConfval spark_conf = new SparkConf().setAppName(WordCount).setMaster(local3)/create streamingcontextval spark_context = new StreamingContext(spark_conf,Seconds(5)(2)在spark-shell中读取Linux系统的本地文件u/home
19、/hadoop/test.txt然后统计出英 语单词的个数(该文本文件只有英文组成)。import org.apache.spark.streaming.Seconds, State, StateSpec, Streamingcontextobject CumulativeWord def main(args: ArrayString): Unit = val conf = new SparkConf().setMaster(local2).setAppName(NetworkWordCount)val ssc = new StreamingContext(conf, Seconds(l)va
20、l initiaIRDD = ssc.sparkContext.parallelize(List(hello, 0)val lines = ssc.socketTextStreamflocalhost, 9999)val words = lines.flatMap(_.split()val pairs = words.map(word = (word, 1)val mappingFunc = (word: String, one: Optionlnt, state: Statelnt) = val sum = one.getOrElse(O) + state.getOption.getOrEl
21、se(O)val output = (word, sum)state.update(sum)output)(3)在spark-shell中监听本地的9999端口的TCP套接字,并使用划窗技术,流计算间隔 为5秒,窗口间隔和滑动间隔自定义,来统计单词数。object WindowsWordNumdef main(args: ArrayString): Unit = val conf = new SparkConf().setAppName(WindowsWordNum).setMaster(local2)Scala 中,创建的是 Streamingcontextval ssc = new Str
22、eamingContext(conf, Seconds(5)val searchWordCountsDStream = searchWordPairDStream.reduceByKeyAndWindow(vl: I nt, vInt) = vl + v2, Seconds(60)/ Seconds(lO)val finalDStream = searchWordCountsDStream.transform(searchWordCountsRDD = val countSearchWordsRDD = searchWordCountsRDD.map(tuple = (tuple._2, tu
23、ple._l)val sortedCountSearchWordsRDD = countSearchWordsRDD.sortByKey(false)val sortedSearchWordCountsRDD = sortedCountSearchWordsRDD.map(tuple = (tuple._l, tuple)val top3SearchWordCounts = sortedSearchWordCountsRDD.take(3)for (tuple val fields=x.split(7)| Edge(fields(2).toLong, fields(4).toLong,lL )
24、I )val graph=Graph.fromEdges(followers, IL)(2)在spark-shell将上述己经创建好的图,获取图的三元组、边、顶点属性并杳看。使用方法如下:abstract val vertices: VertexRDDVD通过方式Graph.vertices调用图的顶点属性,返回一组包含顶点ID和顶点属性的VertexRDDo abstract val edges: EdgeRDDED通过方式Graph.edges调用图的边属性,返回一组包含源顶点ID、目的顶点ID和边属性的 EdgeRDDoabstract val triplets: RDDEdgeTrip
25、letVD, ED通过方式Graph.triplets调用图的三元组属性,返回RDDEdgeTripletVD, EDO(3)下载数据集 中的 page-rank-yt-data.txt 文件,然后对这个文件使用PageRank算法,进行分析,计算得到受欢迎程度最高的前五名 用户。请参考实战项目二的操作流程,进行分析。习题81 .选择题(1)按照任务划分,下列不是机器学习模型的是(D )A.回归模型B.分类模型C.结构化学习模型D.结构化统计模型(2)下列不是MLlib数据类型的是(D )。A.本地向量B.标记向量C.本地矩阵D.向量矩阵(3)如果想把一列特征进行数值化,使得相应的特征索引化要
26、使用什么方法(A )。A. StringindexerB. IndexToStringC. StandardScalerD. Vectorindexer(4)下面哪个不是MLlib的特征选择方法(B ).A. VectoerSlicerB. KafSelectorC. RformulaD. ChiSqSelector(5)在特征提取过程中,通过计数方法将一组文本文档转换为向量使用什么方法(D )。A. CountCentorizerB. StringindexerC. StringVectorD. Tokenizer2.操作题使用Hadoop用户名登录Linux系统,启动Spark-shell
27、,使用Hadoop提供的Shell完成 如下操作:(1)下载数据集 , 该数据集为莺尾花数据统计,然后对这些数据集进行统计工作:数据数量、每一列最大值、 最小值、均值、方差。import org.apache.spark.mllib.stat.MultivariateStatisticalSummary, Statisticsval observations=sc.textFile(G:/spark/iris.data).map(_.split(/,).map(p =Vectors.densep(0).toDouble, p.toDouble, p(2).toDoublez p(3).toDo
28、uble)val summary: MultivariateStatisticalSummary = Statistics.colStats(observations) println(summary.count)150println(summary.mean)7.9,4.4,692.5println(summary.min)4.3,2.0,1.0,0.11println(summary.normLl)println(summary.normL2)72.27620631992245,37.77631533117014,50.82322303829225,17.38677658451963 pr
29、intln(summary.numNonzeros)(150.0,150.0,150.0,150.0)(2)使用我们上述下载的莺尾花数据集进行决策树分类模型构建、并对该分类模型进行评 估、构建决策树回归模型、并对该回归模型进行评估。请参考本文8.4决策树分析。$ cd /usr/local/spark$./bin/spark-shellscalaval textFile=sc.textFile(file:/home/hadoop/test.txt)scalatextFile.count()(3)在spark-shell中读取HDFS系统文件“/data/input/test.txt(如果文件不
30、存在,请先创 建),然后统计出文件的行数。scalaval textFile=sc.textFile(hdfs:/localhost:9000/user/hadoop/test.txt)scalatextFile.count()第二章习题答案实训代码完整程序如下:文件student info, txt的内容如图1所示,注意在Windows平台下将student info, txt保 存为UTF-8的格式。20天津19北京20北京19河北18河北19河北20山东20山东21四川20酬19云南19)女男男女男女男男男男女男小I天乐 甜源田一铭溪恩小凯一k和云甜小一树天小正张李王王赵李王张王张李周O
31、OOOOOOOO111 1 1 1 1 1 1 1 1 1 1 1 1图1学生信息在 Linux 的/usr/local/project 目录下创建文件 student info, txt,使用命令 u touch student info, txt”。执行命令vim student info. txtv对文件进行编辑,按“i”进入编辑 模式,输入图2-40所示内容,按“Esc”退出编辑状态,再执行命令“:wq”进行保存并退 出。在/usr/local/project目录下创建文件Studentinfo, scala,输入内容如下: import scala.io._ import util.
32、control.Breaks._ object Studentinfo var arrInfo:ArrayString = nulldef main(args: ArrayString) 将/usr/local/project/studentinfQ.txt的文件内容读入到数组中 一行为一个元素 val lines = for (line var maleCnt = count )printin (“三个班级共有男生” + maleCnt +“人”) ) case 2 = var femalCnt = count (女)printin,三个班级共有女生” + femalCnt + “人”) c
33、ase 3 = print (输入学号:”)val studentld = Stdin.readLine() var mark = false breakablefor (i 按班级进行分组print (输入班级序号:*)val classld = Stdin.readLine()printin (”班级t学号t姓名t性别年龄t籍贯t电话”)/ * 将arrlnfo数组使用groupBy函数按照班级序号进行分组* 先将数组中的每个元素按照”t“进行分割提取出分割后的第一个元素(即班级序号)按照班级序号进行分组,返回一个MapString,ArrayString)类型将返回值赋值给mapArr*
34、 /val mapArr = arrlnfo.groupBy(x = x.split(Xt)(0) for(maparr flag = falseprintin (再见!)case _ = printin (输入错误,请重新输入”)/使用正则表达式判断字符串s是否为数字 def isIntByRegex(s : String) = val pattern =(d+) $nn . rs match case pattern(_*) = true case _ = false)/展示功能页面def show () = pintlnf *printin(1.printin(H2.printin(3.printin(4.: println(n5.printin (1*printin(1.printin(H2.printin(3.printin(4.: println(n5.printin (1*printin(1.printin(H2.printin(3.printin(4.: println(n5.printin (1*统计