spark复习资料

@[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));
  }
}
```

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
THE END
分享
二维码
< <上一篇
下一篇>>