@[TOC](SPARK試題匯總)
# 選擇題
Scala中定義常量使用關鍵字 ?
A. val
B. var
C. object
D. final
for(i<-1 to 4;j<-0 to 3 if(i\==j)) print(j)的輸出是?
A. 1234
B. 0123
C. 234
D. 123
scala中val x,y=100意味著?
A. x沒有賦值,y是100
B. x是0,y是100
C. x,y都是100
D. 以上說法都不對
Scala中定義變數使用關鍵字 ?
A. val
B. object
C. var
D. final
for(i<-1 to 4;j<-0 to 3 if(i+j==5)) print(j)的輸出是?
A. 432
B. 321
C. 234
D. 123
scala中val sum=0;for(i<-1 to 100) sum=sum+i; sum的結果是?
A. 4950
B. 5050
C. 程式報錯
D. 以上說法都不對
spark是hadoop生態下哪個組件的替代方案?
A. Hadoop
B. Yarn
C. HDFS
D. MapReduce
以下存盤級別不能解決記憶體不足造成溢位的是?
A. DISK_ONLY
B. MEMORY_ONLY_SER
C. MEMORY_AND_DISK
D. MEMORY_AND_DISK_SER
RDD轉化為DataFrame使用的方法是?
A. collect()
B. take()
C. addSchema()
D. toDF()
下面哪個是spark比MapReduce計算快的最主要原因?
A. 基于分布式計算的框架
B. 基于DAG的調度框架
C. 基于記憶體的計算
D. 基于Lineage的容錯機制
下面哪個操作是窄依賴?
A. join
B. filter
C. group
D. sort
下面哪個操作肯定是寬依賴?
A. flatMap
B. map
C. sample
D. reduceByKey
下面不是Spark的核心組件的是 ,
A. GraphX
B. Spark Core
C. Spark SQL
D. Spark Shell
關于累加器,下面哪個是錯誤的?
A. 支持加法
B. 支持數值型別
C. 可并行
D. 不支持自定義型別
Stage 的 Task 的數量由什么決定?
A. Partition
B. Job
C. Stage
D. TaskScheduler
下面哪個不是 Spark SQL的主要特點?
A. 將SQL查詢與Spark應用程式無縫結合
B. 以相同方式連接多種資料源
C. 在現有的資料倉庫上運行SQL
D. 基于記憶體運算快
下面程式的運行結果是?
```
object test{
def main(args:Array[String]){
print(multiInt()+multiInt(0)+multiInt(b=0))}
def multiInt(a:Int=2,b:Int=3):Int={return a*b}}
```
A. 9
B. 6
C. 8
D. 12
下面程式的運行結果是?
```
object test{
def main(args:Array[String]){
val a=Array(1,2,3,4,5)
val b=a.map(x=>{
var r=1;
for(i<-1 to x) r=r*i;
r})
print(b.sum)}}
```
A. 110
B. 153
C. 396
D. 440
spark是hadoop生態下哪個組件的替代方案?
A. Hadoop
B. Yarn
C. HDFS
D. MapReduce
spark中默認的存盤級別是?
A. MEMORY_ONLY
B. MEMORY_ONLY_SER
C. MEMORY_AND_DISK
D. MEMORY_AND_DISK_SER
DataFrame和RDD最大的區別是?
A. 外部資料源支持
B. 科學統計支持
C. 多了schema
D. 儲存方式不一樣
下面哪個不是spark比MapReduce計算快的原因?
A. 基于分布式計算的框架
B. 基于DAG的調度框架
C. 基于記憶體的計算
D. 基于Lineage的容錯機制
下面哪個操作是窄依賴?
A. join
B. filter
C. group
D. sort
下面哪個操作肯定是寬依賴?
A. flatMap
B. map
C. sample
D. reduceByKey
下面不是Spark的核心組件的是 ,
A. Spark Streaming
B. Spark R
C. Spark SQL
D. GraphX
關于累加器,下面哪個是錯誤的?
A. 支持加法
B. 支持數值型別
C. 可并行
D. 不支持自定義型別
Stage 的 Task 的數量由什么決定?
A. Partition
B. Job
C. Stage
D. TaskScheduler
下面哪個不是 RDD 的特點?
A. 可磁區
B. 可持久化
C. 可修改
D. 可序列化
下面程式的運行結果是?
```
object test{
def main(args:Array[String]){
print(addInt()+addInt(0)+addInt(b=0))}
def addInt(a:Int=2,b:Int=3):Int={return a+b}}
```
A. 10
B. 11
C. 12
D. 13
下面程式的運行結果是?
```
object test{
def main(args:Array[String]){
val a=Array(6,2,3,4,5)
val b=a.map(x=>x*x*x)
print(b.sum)}}
```
A. 110
B. 90
C. 396
D. 440
## 填空
Scala中要創建1個1到9(包含9)的連續整數數值序列,可以使用______________ 來表示,
Scala中要創建1個1到10(包含10)的連續整數數值序列,可以使用______________ 來表示,
在創建RDD時可以設定RDD的磁區數量,磁區數量應盡量_______ 集群中所有CPU的核心總數,以便于最大程度發揮CPU性能,
CentOS8中安裝Scala最簡單的命令是 ______________ ,
回圈遍歷RDD資料集中的所有元素,可以使用_______ ,
Spark Streaming提供了一種高級抽象,稱為_______ ,實際上是由多個 ____ 組成的序列,
Scala中沒有靜態方法,但可以使用關鍵字 _______ 定義一個單列物件,其中的方法相當于靜態方法,
Spark提供了兩種共享變數:_______ 和 _______ ,
回傳RDD資料集中元素的個數,可以使用________行動操作,
Spark中的RDD叫做 ___________ ,是Spark中最基本的資料抽象單元,
Spark Streaming中,應用于DStream上的任何操作實際上都是對底層_____的操作,其轉換由________引擎實作,
GraphX中主要的兩個資料結構:_______,
## 判斷
scala中定義變數時可以不賦值, ( )
scala中的while回圈和do回圈與java中不相同, ( )
scala的例外作業機制和java一樣,當程式拋出例外時當前的程式被終止, ( )
spark只能用webUI來查看運行日志, ( )
scala中給變數賦值時一般不需要指定型別, ( )
SparkStreaming的核心抽象是RDD, ( )
RDD通過cache()進行持久化實際上是呼叫了persist()方法 ( )
Yarn 可以作為Spark的資源調度框架, ( )
Spark SQL中可以直接使用SQL查詢DataFrame, ( )
RDD通過persist()進行持久化實際上是呼叫了cache()方法 ( )
## 簡答
什么是DataFrame?
什么是RDD?
決議一個典型Spark作業的作業流程,
## 案例
使用Scala撰寫子程式計算
$$
\sum_{i=a}^{b}i^3
$$
```
def p0(a:Int,b:Int):Int={
val i=a to b;
val ii=i.map(x=>x*x*x)
return ii.sum
}
```
或者
```
def p1(a:Int,b:Int):Int={
if(b<a) return 0;
if(a==b)
return a*a*a
else
return b*b*b+p1(a,b-1)
}
```
或者
```
def p2(a:Int,b:Int):Int={
if(b<a) return 0;
val s1=(b+1)*(b+1)*b*b/4
val s2=(a-1)*(a-1)*a*a/4
return s1-s2;
}
```
使用Scala撰寫子程式計算丑數(ugly number),丑數是其質因數只有2,3,5的數,例如6、8都是丑數,但14不是,因為它包含因子7,
```
def isUglyNum(a:Int):Boolean={
var i=a;
while(i%2==0) i=i/2;
while(i%3==0) i=i/3;
while(i%5==0) i=i/5;
return i==1
}
```
有鳶尾花資料檔案,每行資料分別為SepalLength(萼片長度(cm))、SepalWidth(萼片寬度(cm))、PetalLength(花瓣長度(cm))、PetalWidth(花瓣寬度(cm))、Class(類別),有“,”隔開,需計算各類別鳶尾花各項資料的平均值,補全程式::
```
object irisMain {
def main(args:Array[String]):Unit={
val conf=new SparkConf();
val spark=SparkSession.builder().appName("iris").config(conf)
.master("local[*]").getOrCreate();
val sc=spark.sparkContext;
val linesRDD:RDD[String]=sc.textFile(args(0));
val irisRDD:RDD[(String,(Float,Float,Float,Float))]=linesRDD.map(f=>{
val line:Array[String]=f.split(",");
(line(4),(line(0).toFloat,line(1).toFloat,line(2).toFloat,line(3).toFloat))
})
val ret=irisRDD.groupByKey().map(f=>{
var a1,a2,a3,a4:Float=0;
f._2.foreach(ff=>{
a1=a1+ff._1;
a2=a2+ff._2;
a3=a3+ff._3;
a4=a4+ff._4;
})
val count=f._2.count(p=>{true});
(f._1,a1/count,a2/count,a3/count,a4/count)
})
ret.saveAsTextFile(args(1));
}
}
```
有恒星分類資料集,每行資料分別為Temperature(溫度(K),Int)、L(相對光度,Float)、R(相對半徑,Float)、A_M(絕對幅度,Float)、Color(顏色,String)、Spectral_Class(SMASS規格,String)、Type(型別,Int),有“,”隔開,需計算各型別恒星溫度、相對光度和相對半徑的平均值,補全程式,
```
object starMain {
def main(args:Array[String]):Unit={
val conf=new SparkConf();
val spark=SparkSession.builder().appName("star").config(conf)
.master("local[*]").getOrCreate();
val sc=spark.sparkContext;
val linesRDD:RDD[String]=sc.textFile(args(0));
val starRDD:RDD[(Int,(Int,Float,Float))]=linesRDD.map(f=>{
val line:Array[String]=f.split(",");
(line(6).toInt,(line(0).toInt,line(1).toFloat,line(2).toFloat))
})
val ret=starRDD.groupByKey().map(f=>{
var a1:Int=0;
var a2,a3:Float=0;
f._2.foreach(ff=>{
a1=a1+ff._1;
a2=a2+ff._2;
a3=a3+ff._3;
})
val count=f._2.count(p=>{true});
(f._1,a1/count,a2/count,a3/count)
})
ret.saveAsTextFile(args(1));
}
```
將上倆題使用Spark SQL完成計算,
```
object irisMain {
def main(args:Array[String]):Unit={
val conf=new SparkConf();
val spark=SparkSession.builder().appName("iris").config(conf)
.master("local[*]").getOrCreate();
val sc=spark.sparkContext;
val linesRDD:RDD[String]=sc.textFile(args(0));
val irisRDD:RDD[(String,Float,Float,Float,Float)]
=linesRDD.map(f=>{
val line:Array[String]=f.split(",");
(line(4),line(0).toFloat,line(1).toFloat,line(2).toFloat,
line(3).toFloat)
})
import spark.implicits._;
val df=irisRDD.toDF("Class,sl,sw,pl,pw");
df.createTempView("iris");
val ret=spark.sql("select Class,avg(sl),avg(sw),avg(pl),avg(pw) from iris group by Class");
ret.rdd.saveAsTextFile(args(1));
}
}
```
```
object starMain {
def main(args:Array[String]):Unit={
val conf=new SparkConf();
val spark=SparkSession.builder().appName("star").config(conf)
.master("local[*]").getOrCreate();
val sc=spark.sparkContext;
val linesRDD:RDD[String]=sc.textFile(args(0));
val starRDD:RDD[(Int,Int,Float,Float)]
=linesRDD.map(f=>{
val line:Array[String]=f.split(",");
(line(6).toInt,line(0).toInt,line(1).toFloat,line(2).toFloat)
})
import spark.implicits._;
val df=irisRDD.toDF("type,tp,L,R");
df.createTempView("star");
val ret=spark.sql("select type,avg(tp),avg(L),avg(R) from star group by type");
ret.rdd.saveAsTextFile(args(1));
}
}
```
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/394199.html
標籤:其他
