1. Spark SQL 概述
- Spark SQL是Spark用来处理
结构化数据
的一个模块,它提供了一个编程抽象叫做DataFrame并且作为分布式SQL查询引擎的作用
- 为什么学习Spark SQL
我们已经学习了Hive,它是将Hive SQL转换成MapReduce然后提交到集群上执行,大大简化了编写MapReduce的程序的复杂性,由于MapReduce这种计算模型执行效率比较慢。所以Spark SQL的应运而生,它是将Spark SQL转换成RDD,然后提交到集群执行,执行效率非常快!
- 易整合
- 统一的数据访问方式
- 兼容hive
- 标准的数据链接
2. spark中 RDD、DataFrame、Dataset的关系及区别
3. DataFrame概述
- 与RDD类似,DataFrame也是一个分布式数据容器。然而DataFrame更像传统数据库的二维表格,除了数据以外,还记录数据的结构信息,即schema。同时,与Hive类似,DataFrame也支持嵌套数据类型(struct、array和map)。从API易用性的角度上 看,DataFrame API提供的是一套高层的关系操作,比函数式的RDD API要更加友好,门槛更低。由于与R和Pandas的DataFrame类似,Spark DataFrame很好地继承了传统单机数据分析的开发体验。
RDD是分布式的Java对象集合,DataFrame是分布式的Row对象集合
3.2. 通过反射推断Schema
import org.apache.spark.sql.{DataFrame, SparkSession}
case class Person(id: Int, name: String, age: Int)
/**
* 通过反射推断Schema
*/
object SparkSqlDemo {
def main(args: Array[String]): Unit = {
// 初始化
val spark = SparkSession.builder()
.appName("spark sql basic example")
.master("local")
.getOrCreate()
// RDD --> DataFrame
import spark.implicits._
val peopleDF : DataFrame = spark.sparkContext.textFile("hdfs://1