Spark面试题(一)

目录

 

一、单项选择题

二、不定项选题  

三、填空题

四、判断题

五、简答题

六、编程题


一、单项选择题

1、下面哪个操作是窄依赖?()

  1. join 
  2. filter 
  3. group 
  4. sort

RDD之间的血缘关系又称依赖,包括两种,一种是窄依赖,RDDs之间分区是一一对应的,另一种是宽依赖,下游RDD的每个分区与上游RDD(也称之为父RDD)的每个分区都有关,是多对多的关系。

2、不属于Scala 7种数据类型之一的是?()

  1. Char
  2. Int
  3. Float
  4. LongLong

Byte、Char、Short、Int、Long、Float、Double

3、在Scala中如何获取字符串”Hello”的首字符和尾字符?()

  1. ”Hello”(0),”Hello”(5)
  2. “Hello”.take(1),”Hello”.reverse(0)
  3. “Hello”(1),”Hello”(5)
  4. “Hello”.take(0),”Hello”.takeRight(1)

获取首字符  :"Hello"(0) / "Hello".take(1)  

获取尾字符  :"Hello".reverse(0)  /"Hello".takeRight(1) 

4、Scala 允许用数学去乘字符串,在REPL中输入”crazy”*3,这个操作结果返回什么?()

  1. ”crazy”*3
  2. ccrraazzyy
  3. crazycrazycrazy     *是”crazy”这个字符串所具有的方法
  4. crazy

5、RDD和DataFrame最大的区别是?()

  1. 科学统计支持
  2. 多了schema
  3. 存储方式不一样
  4. 外部数据源支持

RDD以Person为类型参数,Spark框架本身不了解Person类的内部结构。DataFrame提供了详细的结构信息,使得Spark SQL可以清楚地知道该数据集中包含哪些列,每列的名称和类型各是什么。DataFrame多了数据的结构信息,即schema。RDD是分布式的Java对象的集合。DataFrame是分布式的Row对象的集合。

6、Spark中默认的存储级别()

  1. MEMORY_ONLY              存储在内存(jvm)中,内存不够不在缓存,需要时重新计算
  2. MEMORY_ONLY_SER          内存,每个分区是一个byte数组
  3. MEMORY_AND_DISK          存储在内存,如果内存不够,存储在磁盘
  4. MEMORY_AND_DISK_SER      类似B,溢出的分区存储在磁盘上

7、编写一个过程countdown(n:Int),打印从n到0的数字?()

  1. def countdown(n:Int){

          0 to n foreach print                       //012345678910

}

  1. def countdown(n:Int){

         (0 until n ).reverse foreach print            //9876543210

}

  1. def countdown(n:Int){

        0 to n reverse foreach print          //x

}

  1. def countdown(n:Int){

        (0 to n-1) reverse foreach print       //x

}

 

正确答案:(0 to n).reverse foreach print              //109876543210

 

8、下面哪个属于Spark组成部件?()

  1. Resource Manager
  2. Executor  Driver
  3. RDD
  4. Client

 

9、下面哪个不是RDD的特点?()

  1. 不支持增量迭代计算
  2. 基于内存的计算
  3. 没有schema信息
  4. 支持细粒度的写和更新

spark写数据是粗粒度的。所谓粗粒度,就是批量写入数据,为了提高效率。但是读数据是细粒度的,也就是说是一条一条读的。不支持增量迭代计算,Flink支持。

10、对于函数

Def getGoodsPrice(goods:String)={

Val prices = Map (“book”-> 5 ,”pen” -> 2,”sticker” ->1)

Prices.getOrElse(goods,0)

}

结果说法错误的是?()

  1. getGoodsPrice(“book”)//等于5
  2. getGoodsPrice(“pen”)//等于2
  3. getGoodsPrice(“sticker”)//等于1
  4. getGoodsPrice(“sock”)//等于”sock”     //0

二、不定项选题  

  1.  关于数据及软件架构的CAP理论不包括下面哪些( D  )

             A. 可用性 B. 一致性 C. 分区容忍性 D. 分布性 

     CAP指的是在一个分布式系统中,一致性可用性、分区容错性。这三个要素最多只能同时实现两点,不可能三者兼顾。

 

 2 下列关于spark中的RDD描述正确的有 ( ABCD   ) 

  1.  RDD(Resilient Distributed Dataset)叫做弹性分布式数据集,是spark中最基本的数据抽象 
  2.  Resilient:表示弹性的,弹性表示内存不够存入磁盘 
  3.  Destributed:分布式,可以并行在集群计算
  4.  Dataset:就是一个集合,用于存放数据的 

3. 下列哪些是java技术的特征(  ABC  ) 

      A. 封装 B. 继承 C. 多态 D.分布性 

4. 下列描述正确的是(  ABD  ) 
A. 进程(Process)是程序的一次执行过程 
B. 线程(Thread) 是比进程更小的执行单位 
C. 线程不可共享相同的内存单元     同一个进程内的线程使用的是同一块内存

D.在同一个应用程序中可以有多个线程同时执行  

 

5. 下面哪些是spark比Mapreduce计算快的原因(   ABC    )
 A. 基于内存的计算 B. 基于DAG的调度框架
 C. 基于Lineage的容错机制 D. 基于分布式计算的框架 

       RDDLineage会记录RDD的元数据信息和转换行为,当该RDD的部分分区数据丢失时,它可以根据这些信息来重新运算和恢复丢失的数据分区。

6. 下面哪个操作是窄依赖?(  B  )
 A. join    B. filter  C. group   D. sort   

7.下面哪个操作肯定是宽依赖 (  C )     reduceBykeygroupByKey都是宽依赖
A. map  B. flatMap
C. reduceByKey  D. sample

8. 最早是Cloudera提供的日志收集系统,目前是Apache下的一个孵化项目,支持在日志系统中定制各类数据发送方,用于收集数据的工具是(  A  ) 

A. Flume B. Zookeeper C. Storm D. Sparkstreaming 

9.一个分布式应用程序协调服务,分布式应用程序可以基于它实现同步服务,配置维护和命名服务等的工具有 (  B  )
 A. Flume B. Zookeeper C. Storm D. Sparkstreaming 

10. 作为分布式消息队列,既有非常优秀的吞吐量,又有较高的可靠性和扩展性,同时接受Spark Streaming的请求,将流量日志按序发送给Spark Streaming集群是 ( C   )
 A. Flume B. Zookeeper C. Kafka D. Sparkstreaming  

11. Hadoop框架的缺陷有(  ABC  ) 
A. MR编程框架的限制 

B. 过多的磁盘操作,缺乏对分布式内存的支持 
C. 无法高效的支持迭代式计算 
D.海量的数据存储 

Hadoop不支持迭代式计算,spark支持(RDD迭代)

12. Hadoop组件的核心功能包括(   AD    ) 
A、分布式数据存储       B、分析      C、挖掘    D、分布式计算  

13. DataFrame 和 RDD 最大的区别 (  B ) 
A.科学统计支持 B.多了schema  
C.存储方式不一样  D.外部数据源支持 

14. spark中默认的存储级别 ( A ) 
A. MEMORY_ONLY       B. MEMORY_ONLY_SER 
C. MEMORY_AND_DISK   D. MEMORY_AND_DISK_SER  

15. Spark组成部件包括(  BC     ) 
A. Resource Manager B. Executor C. Driver D. RDD 

16. Spark RDD的依赖机制包括(  AD  ) 
A.  宽依赖 B.   深度依赖 C. 广度依赖 D. 窄依赖 

17. RDD有哪些缺陷?  ACD  

A.不支持细粒度的写和更新操作(如网络爬虫) 
B.基于内存的计算 
C.拥有schema信息               
D.不支持增量迭代计算  (可以使用checkpoint)

18. Spark应用的计算逻辑会被解析成DAG,这个解析操作由以下哪个功能模块完成(  CD  )  
A. Client B. ApplicationMaster  
C. Executor  D. Driver   

19. spark的部署模式有?  ABCD  

A.本地模式 B.standalone 模式 C.spark on yarn 模式 D.mesos模式  

20. 下面不是Spark 的四大组件的有( BD   ) 
A. Spark Streaming  

B. pyspark     为了用Spark支持Python,Apache Spark社区发布了一个工具PySpark 
C. Graphx  
D. Spark R SparkR是一个R语言包,它提供了轻量级的方式使得可以在R语言中使用Apache Spark 

Spark 的四大组件有:Spark SQL、Spark Streaming、MLlib、GraphX

 

三、填空题

  1. 最早是Cloudera提供的日志收集系统,目前是Apache下的一个孵化项目,支持在日志系统中定制各类数据发送方,用于收集数据的工具是_______flume_________;一个分布式应用程序协调服务,分布式应用程序可以基于它实现同步服务,配置维护和命名服务等的工具是_____zookeeper_____;作为分布式信息队列,既有非常优秀的吞吐量,又有较高的可靠性和扩展性,同时接受Spark Streaming 的请求,将流量日志按序发送给Spark Streaming 集群是______kafka_______
  2. 写出四种Spark的部署模式____local_________standalone____________yarn____________mesos_______
  3. 定义一个类Counter,类里包含两个变量name,age 变量类型分别为String和Int的代码:

Class Counter __{

var name:String

var age:Int

}_。

  1. 函数 def fac(n:Int) = { var r = 1; for(i <- 1 to n )r = r * i } fac(5)输出结果是_____120_______。
  2. Scala的方法的参数都是_____ val _____类型,因此在函数体内不可以修改参数的值。
  3. 通过如下语句创建了一个______ SparkSession ________对象:

   Scala>import org.apache.spark.sql.SparkSession

   Scala>val spark = SparkSession.builder().getOrCreate();

四、判断题

  1. RDD叫做弹性分布式数据集,是分布式内存的一个抽象概念,提供了一种 高度受限的共享内存模型。(对)
  2. 基于分布式计算的框架是spark比Mapreduce计算快的原因之一。(错)     内存计算、DAG有向无环图
  3. Spark最大的特点就是将计算数据、中间结果都存储在内存中,大大减少I/O开销。(对)
  4. 关于辅助构造器,辅助构造器必须要带参数。(对)     构造器this,主构造器无参,辅助有参
  5. Scala中可以将函数赋值给变量,如 val fun = scala.math.cell。(错)      scala.math.ceil(0.74)=1
  6. Spark 的四大组件分别是Spark Streaming、Spark MLlib、YARN、SparkSQL。(错)    SparkSQL、SparkStreaming、MLlib、GraphX
  7. transformation和action是Spark支持的两种RDD操作。(对)
  8. 对于代码class Cat extends Animal{ }来讲,Cat是Animal的超类。(错)
  9. Scala中接口称为特质,跟java中的接口一样,特质中不可以有构造器。(错)
  10. 类和单例对象间的差别是单例对象不可以带参数,而类可以。(对)

       单例对象相当于静态方法,不是new出来,所以没办法传值。与类同名即是伴生对象

五、简答题

  1. 下列JSON格式数据命名为employee.json,文件路径“usr/local/spark/examples/employee.json”。

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

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

{“id” : 3 , “name”: “Jack” , “age”: 29}

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

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

{“id” : 5 , “name”: “Damon” }

{“id” : 5 , “name”: “Damon” }

为employee.json创建DataFrame,并写出Scala语句完成下列操作:

  1. 查询所有数据,并去除重复的数据;
  2. 查询所有数据,打印时去除id字段;
  3. 筛选出age>30的记录;
  4. 查询所有记录的name列,并为其取名为username;
  5. 查询年龄age的平均值。
/**
 * 读取元数据json,并使用sql语句完成以下功能
 */
object SqlOperation3 {
  def main(args: Array[String]): Unit = {
    val sc = new SparkContext(new SparkConf().setAppName("SparkSQL").setMaster("local[*]"))

    //创建SQLContext对象
    val sqlc = new SQLContext(sc)
    val df: DataFrame = sqlc.read.json("in/info.json")

    //使用Sql语法
    //注册临时表,这个表相当于存储在 SQLContext中所创建对象中
    df.registerTempTable("t_person")

    //1 查询所有数据,并去除重复的数据;
    val sql = "select distinct * from t_person"

    //2 查询所有数据,打印时去除id字段;
    val sql2 = "select id,name from t_person"

    //3 筛选出age>30的记录;
    val sql3 = "select * from t_person where age>30"

    //4 查询所有记录的name列,并为其取名为username
    val sql4 = "select name as username from t_person"

    //5 查询年龄age的平均值
    val sql5 = "select avg(age) from t_person"

    //查询
    val res = sqlc.sql(sql)
    res.show() //默认打印是20行
    // 固化数据,将数据写到文件中mode是以什么形式写  写成什么文件
    //    res.write.mode("append").json("out3")
    //除了这两种还可以csv模式,json模式
    //    res.write.mode("append").save("out4")
  }

  //case class,编译器自动为你创建class和它的伴生 object,并实现了apply方法让你不需要通过 new 来创建类实例
  case class Person(id: Int, name: String, age: Int)

}

2、spark中的RDD是什么,有哪些特征?

       1.RDD是由一系列的partition组成的

       2.RDD之间具有依赖关系

       3.RDD作用在partition是上

       4.partition作用在具有(k,v)格式的数据集

       5.partition对外提供最佳计算位置,利于数据本地化的处理

3、阅读下面这段代码

Def  joinRdd(sc:SparkContext) {

Val name = Array(

Tuple2(1,”spark”),

Tuple2(2,”tachyon”),

Tuple2(3,”hadoop”)

)

Val score = Array(

Tuple2(1,100),

Tuple2(2,90),

Tuple2(3,80)

)

Val namerdd = sc.parallelize(name);

Val scorerdd = sc.parallelize(score);

【代码】

}

写出在【代码】处填入以下代码时的输出结果。

  1. val result = namerdd.join(scorerdd);
  2. Result.collect.foreach(println);
  3. Result.count();
  4. Result.take(3)
object spark {
  def main(args: Array[String]): Unit = {
    val sc = new SparkContext(new SparkConf().setAppName("SparkSQL").setMaster("local[*]"))
    joinRdd(sc)

    def joinRdd(sc: SparkContext) {
      val name = Array(
        Tuple2(1, "spark"),
        Tuple2(2, "tachyon"),
        Tuple2(3, "hadoop")
      )
      val score = Array(
        Tuple2(1, 100),
        Tuple2(2, 90),
        Tuple2(3, 80)
      )
      val namerdd: RDD[(Int, String)] = sc.parallelize(name);
      val scorerdd: RDD[(Int, Int)] = sc.parallelize(score);
      //join:在类型为(K,V)和(K,W)的RDD上调用,返回相同key对应的元素对的(K,(V,W))的RDD
      val result: RDD[(Int, (String, Int))] = namerdd.join(scorerdd);
      result.collect.foreach(println)
      println(result.count())
      println(result.take(3).mkString(","))
      /*
          (1,(spark,100))
          (2,(tachyon,90))
          (3,(hadoop,80))
          --------------------------------------
          3
          --------------------------------------
          (1,(spark,100)),(2,(tachyon,90)),(3,(hadoop,80))
       */
    }
  }
}

六、编程题

  1. 如何使用Spark解决分组排序问题?

   组织数据形式

   aa   11

   bb   11

   cc   34

   aa   22

   bb   67

   cc   29

   aa   36

   bb   33

   cc   30

   aa   42

   bb   44

   cc   49

需求:

  1. 对上述数据按Key值进行分组;
  2. 对分组后的值进行排序;
  3. 截取分组后的值top3位一key-value 形式返回结果。
/**
 * 将数据分组排序取top3
 */
object group_sort {
  def main(args: Array[String]): Unit = {
    val sparkContext = new SparkContext(new SparkConf().setMaster("local[*]").setAppName(""))
    val lined: RDD[String] = sparkContext.textFile("in/group_sort")

    val maped: RDD[(String, String)] = lined.map(r => {
      val strings: Array[String] = r.split("   ")
      val key: String = strings(0)
      val value: String = strings(1)
      (key, value)
    })
    val sorted: RDD[(String, Iterable[String])] = maped.groupByKey().sortBy(_._2)

    val maped2: RDD[(String, List[String])] = sorted.map(x => {
      val key: String = x._1
      val strings: List[String] = x._2.toList.reverse.take(3)
      (key, strings)
    })
    maped2.foreach(println)
  }
}

2、编程实现将RDD转换为DataFrame

   源文件是在“/usr/local/spark/”目录中的student.txt文件,其内容如下(每行数据从左到右分别是 id,name,score):

1:张三:87

2:李四:88

3:王五:55

请将student.txt加载到内存中生成一个DataFrame,并按“id:1,name:张三,score:87”的格式打印出DataFrame的所有数据。

/*
*请将student.txt加载到内存中生成一个DataFrame,并按“id:1,name:张三,score:87”的格式
* 打印出DataFrame的所有数据。
 */
object student {
  def main(args: Array[String]): Unit = {
    val sparkContext = new SparkContext(new SparkConf().setMaster("local[*]").setAppName(""))
    val lined: RDD[String] = sparkContext.textFile("in/3.txt")

    val maped: RDD[(String, String, String)] = lined.map(x => {
      val strings: Array[String] = x.split(":")
      (strings(0), strings(1), strings(2))
    })

    val personRDD: RDD[person] = maped.map(tuple => {
      person(tuple._1.toInt, tuple._2, tuple._3.toInt)
    })
    val sqlc: SQLContext = new SQLContext(sparkContext)
    import sqlc.implicits._
    val personDF: DataFrame = personRDD.toDF()
    personDF.foreachPartition(rdd => {
      val row: List[Row] = rdd.toList
      row.foreach(x => {
        println("id:" + x(0) + ",name:" + x(1) + ",score:" + x(2))
      })
    })
  }
  case class person(id: Int, name: String, score: Int)
}

3、写出一个Spark Streaming 程序,监控某目录中的文件,指定监控的目录为“/home/hadoop/temp/”,其能获取在该间隔时间段内变化的数据,例如在文件里新增一部分单词(单词之间用空格隔开)(文件夹新增文件),然后通过计算得出改时间段内的单词统计数。

部分代码已给出。

Import org.apache.spark.SparkConf

Import org.apache.spark.streaming.{Seconds,StreamingContext}

Import org.apache.spark.steaming.StreamingContext._

Object FileWordCount {

Def main(args:Array[String]) {

/**
 * 监控文件夹,实现单词统计,结果保存到HDFS
 */
object FileStream {
  def main(args: Array[String]): Unit = {
    //1.初始化Spark配置信息
    val sparkConf = new SparkConf().setMaster("local[*]").setAppName("StreamWordCount")

    //2.初始化SparkStreamingContext
    val ssc: StreamingContext = new StreamingContext(sparkConf,Seconds(5))

    //3.监控文件夹创建DStream
    val dirStream: DStream[String] = ssc.textFileStream("file:///home/hadoop/temp/") //不支持嵌套

    //4.将每一行数据做切分,形成一个个单词
    val wordStreams: DStream[String] = dirStream.flatMap(_.split(" "))

    //5.将单词映射成元组(word,1)
    val wordAndOneStreams = wordStreams.map((_, 1))

    //6.将相同的单词次数做统计
    val wordAndCountStreams = wordAndOneStreams.reduceByKey(_ + _)

    //7.打印
    //    wordAndCountStreams.foreachRDD(x=>println(x))
    wordAndCountStreams.print()

    //8.启动SparkStreamingContext
    ssc.start()
    ssc.awaitTermination()
  }
}

 

  • 5
    点赞
  • 30
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 好的,下面是对大数据面试题——spark面试题(一)的回答: 1. 什么是Spark?它与Hadoop有什么区别? Spark是一个快速、通用、可扩展的大数据处理引擎,它可以在内存中进行数据处理,因此比Hadoop更快。与Hadoop相比,Spark的优点在于它可以在内存中进行数据处理,因此速度更快,而且它支持更多的数据处理方式,例如流处理、图形处理等。 2. Spark的核心组件有哪些? Spark的核心组件包括Spark Core、Spark SQL、Spark Streaming、MLlib和GraphX。 3. 什么是RDD?它有哪些特点? RDD是Spark中的一个基本概念,它代表一个不可变的分布式数据集合。RDD具有以下特点: - 可以在内存中进行计算,因此速度快; - 支持多种操作,例如map、reduce、filter等; - 可以进行持久化,以便在后续计算中重复使用。 4. Spark中的map和flatMap有什么区别? map和flatMap都是RDD中的转换操作,它们的区别在于: - map操作对每个元素进行转换,返回一个新的元素; - flatMap操作对每个元素进行转换,返回一个包含多个元素的序列。 5. 什么是Spark的shuffle操作? Spark的shuffle操作是指将数据重新分区的操作,它通常发生在reduce操作之前。Shuffle操作会将数据从多个节点上收集到一个节点上,然后重新分区,以便进行后续的计算。 6. Spark中的cache和persist有什么区别? cache和persist都是将RDD持久化到内存中,以便在后续计算中重复使用。它们的区别在于: - cache操作默认将数据持久化到内存中,而persist操作可以指定将数据持久化到内存、磁盘或者其他存储介质中; - cache操作是persist操作的一种简化形式,它默认将数据持久化到内存中,并且只能持久化到内存中。 7. Spark中的reduceByKey和groupByKey有什么区别? reduceByKey和groupByKey都是对键值对RDD进行操作的函数,它们的区别在于: - reduceByKey操作会在每个分区内先进行本地聚合,然后再进行全局聚合,因此效率更高; - groupByKey操作会将所有的键值对都进行网络传输,然后在一个节点上进行聚合,因此效率较低。 8. Spark中的broadcast变量有什么作用? broadcast变量是一种只读的变量,它可以在所有节点上共享,以便在计算过程中使用。使用broadcast变量可以避免在网络上传输大量的数据,从而提高计算效率。 9. 什么是Spark的checkpoint操作? Spark的checkpoint操作是将RDD持久化到磁盘上,以便在后续计算中重复使用。与cache和persist不同的是,checkpoint操作会将数据持久化到磁盘上,以便在内存不足时可以从磁盘上恢复数据。 10. Spark中的Task是什么? Task是Spark中的一个基本概念,它代表一个可以在一个节点上执行的计算任务。Spark将一个RDD分成多个分区,每个分区对应一个Task,这些Task可以并行执行,以提高计算效率。 ### 回答2: 今天我们来讨论一下关于Spark大数据面试的一些常见问题。Spark是一种基于Hadoop的开源计算系统,它能够快速处理大规模数据,并且支持多种编程语言,包括Java、Scala和Python等。以下是一些Spark面试题及其答案: 1. Spark有哪几种部署模式? Spark有三种部署模式,分别是本地模式、集群模式和分布式模式。本地模式指的是在本地运行Spark应用程序,不需要连接到外部计算机。集群模式指的是单个Spark集群环境,它由一组Spark节点组成,可以在数据中心或云中运行。分布式模式指的是使用多个Spark集群并行处理大规模数据。 2. Spark和Hadoop的区别是什么? Spark和Hadoop都是处理大规模数据的工具,但它们有一些区别。首先,Spark处理数据速度快,因为它将数据存储在内存中,而Hadoop则将数据存储在磁盘中。其次,Spark支持更多的编程语言,包括Java、Scala和Python等,而Hadoop只支持Java。此外,Spark具有更好的机器学习和图形处理功能,可以更好地支持大规模数据分析。 3. Spark的RDD是什么? RDD是Spark中重要的概念,全称为Resilient Distributed Dataset。它是一个不可变的分布式数据集合,可以分区存储在不同节点上,并且每个分区都可以在并行处理中进行处理。RDD支持两种操作,即转化操作和行动操作。转化操作将一个RDD转换为另一个RDD,而行动操作返回一个结果或将结果输出至外部系统。 4. Spark的优化技术有哪些? Spark优化技术包括数据本地化、共享变量、宽依赖和窄依赖、缓存和持久化,以及数据分区等技术。数据本地化将数据存储在尽可能接近计算节点的位置,以减少网络传输的开销。共享变量将常用的变量通过广播或累加器的方式在节点中共享,从而减少网络传输量。宽依赖和窄依赖指的是在转化操作中RDD之间的依赖关系,窄依赖表示每个父分区最多与一个子分区有关联,而宽依赖则表示多个子分区可能与多个父分区关联。缓存和持久化技术可将RDD保存在内存中,从而加速访问速度。数据分区可以将数据划分为较小的块进行并行处理。 5. Spark Streaming是什么? Spark Streaming是Spark的一个扩展模块,它支持实时数据流处理。Spark Streaming可以将实时数据流以微批次方式处理,每个批次的数据处理平均耗时只有几秒钟。Spark Streaming可以将数据存储在内存或磁盘中,同时支持多种数据源和数据输出方式。 以上是关于Spark大数据面试题的一些回答,希望能够对大家有所帮助。如果你想深入学习Spark和大数据处理技术,可以考虑参加相关的培训课程或在线课程。 ### 回答3: Spark是一个分布式计算框架,它可以使大规模数据处理更加高效和便捷。因此,在企业招聘大数据领域的人才时,对Spark的技术能力要求越来越高。以下是Spark面试题的回答: 1. Spark有哪些组件? Spark框架由三个核心组件组成:Spark Core、Spark SQL和Spark Streaming。此外,还有Spark MLlib、Spark GraphX、Spark R等个别不同的子组件。 2. 什么是RDD?与Dataframe有什么区别? RDD(弹性分布式数据集)是Spark的核心数据抽象,是不可变的分布式对象集合。RDD可以从文件中读取数据、从内存中读取数据、并行修改数据等。而Dataframe和RDD类似,但是Dataframe更加强大,因为它是带有结构化的RDD。Dataframe在处理大规模结构化数据时非常有效和便捷。 3. Spark如何处理缺失数据? Spark提供了两种处理缺失数据的方法:第一种是使用DataFrame API中的na函数,可以删除或替换缺失值;第二种是使用MLlib中的Imputer类,可以将缺失值替换为均值或中位数。 4. 什么是Spark的任务(task)? 一个任务是Spark作业中的最小执行单位。Spark集群上的作业被划分为多个任务,这些任务可以并行执行。 5. Spark的shuffle操作是什么?它为什么是昂贵的? Spark的shuffle操作是将一组数据重新分配到不同计算节点上的操作。Shuffle操作可能会导致大量数据的磁盘写入、网络传输和数据重组,这些都是非常昂贵的操作。因此,它在Spark集群中是一个相当昂贵的操作。 6. Spark中的Partition有什么作用? Partition是Spark中的数据划分单位。它可以将数据分成多个块并对每个块进行处理。Partition 可以提高 Spark 的并行度和运行效率,因为它可以将大规模数据分成多个小块,并在集群的多个计算节点上并行处理数据。 总而言之,Spark是大数据领域中使用最广泛的计算引擎之一,其技术理念和应用场景非常广泛。对于求职者而言,掌握 Spark 的基本概念和技术特点,提高对 Spark 的理解和应用能力,将有助于更好地处理和分析大规模数据集。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值