《Spark编程基础》(Scala版)第六章简答题答案(自制)
6 Spark SQL
简答题
T1 请阐述 Hive 中 SQL 查询转化为 MapReduce 作业的具体过程。❌
答:HiveSQL 命令或查询首先进入到驱动模块,由驱动模块中的编译器进行解析编译,并由优化器对该操作进行优化计算,然后交给执行器去执行,执行器通常的任务是启动一个或多个 MapReduce 任务,详细过程如下:
① 将SQL转换成抽象语法树;
② 将抽象语法树转换成查询块;
③ 将查询块转换成逻辑查询计划;
④ 重写逻辑查询计划;
⑤ 将逻辑计划转成物理计划;
⑥ 选择最佳的优化查询策略。
T2 请阐述 Shark 和 Hive 的关系以及 Shark 有什么缺陷。
答:
① Shark 和 Hive 的关系:Hive 把 SQL 语句转化成 MapReduce 任务执行,而 Shark 的在继承了大量的 Hive 代码实现与 Hive 兼容的同时,把 SQL 语句转换成 Spark 作业执行。
② Shark缺陷:
(1)逻辑执行计划的优化完全依赖于 Hive,不方便添加新的优化策略;
(2)Spark 是线程级并行,而 MapReduce 是进程级并行;因此,Spark 在兼容 Hive 的实现上存在线程安全问题。
T3 请阐述 Shark 与 Spark SQL 的关系。
答:Spark SQL 在 Shark 原有的架构上重写了逻辑执行计划的优化部分,解决了 Shark 存在的兼容问题。
T4 请分析 Spark SQL 出现的原因。
答:传统的关系数据库在大数据时代已经不能满足各种新增的用户需求。
① 用户需要从不同数据源执行各种操作,包括结构化和非结构化数据;
② 用户需要执行高级分析,比如机器学习和图像处理。
T5 RDD 和 DataFrame 有什么区别🌱
答:
① DataFrame 比原有的 RDD 转化方式更加简单易用,而且有更高的计算性能;
② RDD 是分布式 Java 对象的集合,但是,对象内部结构对 RDD 而言不可知;DataFrame 是一种以 RDD 为基础的分布式数据集,提供了详细的结构信息,就相当于关系数据库的一张表。
T6 Spark SQL 支持读写哪些类型的数据?
答:可以来自 RDD,也可以来自 Hive、HDFS 等外部数据源,还可以是 JSON 等格式的数据。
T7 RDD 转换得到 DataFrame 可以有哪两种方式🌱
答:
① 利用反射机制推断 RDD 模式:利用反射机制来推断包含特定类型对象的 RDD 模式,适合用于对已知数据结构的 RDD 转换;
② 使用编程方式定义 RDD 模式:使用编程接口构造一个模式,并将其应用在已知的 RDD 上。
T8 使用编程方式定义 RDD 模式的基本步骤是什么?🌱
答:
① 制作"表头"。"表头"是指表的模式,需要包含字段名称、字段类型和是否允许为空值等信息;
② 制作"表中的记录"。每条记录封装到一个 Row 对象中,并把所有记录的 Row 对象一起保存到一个 RDD 中;
③ 把"表头”和"表中的记录"拼装在一起。利用spark.createDataFrame()语句进行拼接,得到一个 DataFrame。
T9 为了使得 Spark SQL 能够访问 Hive,需要做哪些准备工作?
答:
① 在使用 Spark SQL 访问 Hive 之前,需要安装 Hive;
② 为了让 Spark 能够访问 Hive,必须为 Spark 添加 Hive 支持。

                
            
        
浙公网安备 33010602011771号