SparkSQL概述、6种不同数据格式创建DataFream方式、3种函数

SparkSQL概述、6种不同数据格式创建DataFream方式、3种函数

一、SparkSQL简述

1 SparkSQL产生

Hive->Shark->SparkSQL

Shark Hive on Spark Hive即作为存储又负责sql的解析优化,Spark负责执行

SparkSQL Spark on Hive Hive只作为储存角色,Spark负责sql解析优化,执行

SparkSQL产生的根本原因是为了完全脱离Hive限制(解耦)

2 SparkSQL特点

​ SparkSQL兼容所有的Hive和Shark语法

​ SparkSQL支持查询原生的RDD。 RDD是Spark平台的核心概念,是Spark能够高效的处理大数据的各种场景的基础

​ 能够在Scala中写SQL语句。支持简单的SQL语法检查,能够在Scala中写Hive语句访问Hive数据,并将结果取回作为RDD使用--------> df.rdd + val age: Long = row.getAs[Long] (“age”)

​ 使用DataFrame分布式容器

3-1 DataFrame分布式数据容器

​ DataSet = DataFream

​ DataFrame也是一个分布式数据容器,与RDD类似

​ DataFrame更像一张二维表格,有数据也有列的Schema信息–数据的结构信息

​ DataFrame与Hive类似,DataFrame也支持嵌套数据类型(struct、array和map)

​ DataFrame的底层封装的是RDD,只不过RDD的泛型是Row类型

​ 想要使用SQL查询分布式数据,必须创建DataFream,而后可以注册视图,使用SQL查询

​ DataFrame转化成RDD df.rdd

在这里插入图片描述

3-2 DateSet-区别RDD与创建

1 SparkCore底层操作的是RDD,SparkSQL底层操作的是DataSet

2 序列化机制与RDD不同,可以不用反序列化成对象再去调用该对象中的方法

3 在RDD的基础上增加了一些方法

4 强类型,类似于DataFream,默认列名是“value”

5 三种创建方法

​ a 由集合 创建DataSet

1 Person对象
            //直接映射成Person类型的DataSet
            val list = List[Person](
              Person(1,"zhangsan",18,100),
              Person(2,"lisi",19,200),
              Person(3,"wangwu",20,300)
            )
            val personDs: Dataset[Person] = list.toDS()
            personDs.show(100)
    
2 集合 	
            val value: Dataset[Int] = List[Int](1, 2, 3, 4, 5).toDS()
            value.show()

​ b 由json文件和类 直接映射成DataSet

val lines: Dataset[Student] = spark.read.json("./Test_spark/data/json").as[Student]

​ c 读取外部文件 直接加载DataSet

val dataSet: Dataset[String] = spark.read.textFile("./Test_spark/data//people.txt")
val result: Dataset[Person] = dataSet.map(line => {
  val arr: Array[String] = line.split(",")
  Person(arr(0).toInt, arr(1).toString, arr(2).toInt, arr(3).toDouble)
})
result.show()

4 SparkSQL数据源

​ JSON类型的字符串,JDBC,Parquent,Hive,HDFS等

5 SparkSQL底层架构

​ 首先拿到sql后解析一批未被解决的逻辑计划,再经过分析得到分析后的逻辑计划,再经过一批优化规则转换成一批最佳优化的逻辑计划,再经过SparkPlanner的策略转化成一批物理计划,随后经过消费模型转换成一个个的Spark任务执行

6 谓词下推-优化job

以下列语句为例:

​ SELECT table1.name,table2.score FROM table1

​ Join table2 ON(table1.id=table2.id)

​ WHERE table1.age>50 AND table2.score>90

在这里插入图片描述

二、创建DataFrame的方式

1 读取json格式文件

注意事项
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值