SparkSql

  SparkSql是专门为spark设计的一个大数据仓库工具,就好比hive是专门为hadoop设计的一个大数据仓库工具一样。

特性:

、易整合
可以将sql查询与spark应用程序进行无缝混合使用,同时可以使用java、scala、python、R语言开发代码
、统一的数据源访问
sparksql可以使用一种相同的方式来对接外部的数据源
val dataframe=SparkSession.read.格式("该格式文件的路径")
、兼容hive
可以通过sparksql来操作hivesql
、支持标准的数据库连接
可以通过使用jdbc和odbc来连接上数据库

DataFrame

  DataFrame前身叫SchemaRDD,在spark1.3.0之后把schemaRDD改名为DataFrame,DataFrame不在继承RDD,而之前的SchemaRDD它是直接继承自RDD,它是自己实现了RDD的一些方法。

  DataFrame是spark中基于RDD的分布式数据集,类似于传统数据库中的二维表格,表中有对应的字段名称和类型。在DataFrame这些信息就是它schema元信息。

DataFrame和RDD的区别

  DataFrame比RDD多了对数据结构的描述信息,也就是DataFrame中的schema,schema里面有哪些列和列的类型是什么。

DataFrame和RDD的优缺点

RDD
优点
、编译时类型安全
也就是说后期开发代码的时候会进行类型的检查
、具有面向对象编程的风格
可以通过对象调用方法
缺点
、数据序列化和反序列化性能开销很大。
数据在进行网络传输的时候,先要进行序列化,后续又需要进行反序列化这些操作都是在内存中进行
、频繁的对象的创建会带来GC(jvm内存回收机制:垃圾回收),GC处理的时候,其他进程都会暂停。
DataFrame
优点
DataFrame引入了schema和off-heap
、schema就是对于DataFrame数据的结构信息进行描述
在进行数据序列化的时候,就不需要针对于数据的结构进行序列化了,直接把数据本身进行序列化就可以了,减少数据的网络传输。
解决了RDD在数据进行序列化和反序列化性能开销很大这个缺点。
、off-heap不在使用jvm堆中的内存来构建大量的对象,而是直接使用操作系统层面上的内存
解决了RDD在堆中频繁创建大量的对象造成GC这个缺点。
缺点
DataFrame引入了schema和off-heap解决了RDD的缺点,同时也丢失了RDD的优点
、编译时不在是类型安全
、也不具备面向对象编程这种风格

创建DataFrame的几种方式

读取文本文件

val df=spark.read.text("/person.txt")
df.printSchema
df.show

读取json文件

val df=spark.read.json("/people.json")
df.printSchema
df.show

读取parquet文件

val df=spark.read.parquet("/users.parquet")
df.printSchema
df.show

DataSet

  DataSet是分布式的数据集合,Dataset提供了强类型支持,也是在RDD的每行数据加了类型约束。DataSet是在Spark1.6中添加的新的接口。它集中了RDD的优点(强类型和可以用强大lambda函数)以及使用了Spark SQL优化的执行引擎。

DataSet和DataFrame的转换

1、DataFrame转换成DataSet
val ds=df.as[强类型]
2、DataSet转换成DataFrame
val df=ds.toDF

创建DataSet的几种方式

通过一个已经存在的scala集合去构建

val ds=spark.createDataset(List(1,2,3,4))
val ds=List(1,2,3,4).toDS

通过一个已经存在的RDD去构建

val ds=spark.createDataset(sc.textFile("/person.txt"))

DataFrame转换成DataSet

val ds=df.as[强类型]

通过一个已经存在DataSet调用对应的方法去生成一个新的DataSet

val ds1=ds.map(x =>"itcast:"+x)

http://spark.apache.org/docs/2.1.3/api/scala/index.html#org.apache.spark.sql.Dataset

Spark之 SparkSql、DataFrame、DataSet介绍的更多相关文章

  1. spark RDD,DataFrame,DataSet 介绍

    弹性分布式数据集(Resilient Distributed Dataset,RDD) RDD是Spark一开始就提供的主要API,从根本上来说,一个RDD就是你的数据的一个不可变的分布式元素集合,在 ...

  2. Spark入门之DataFrame/DataSet

    目录 Part I. Gentle Overview of Big Data and Spark Overview 1.基本架构 2.基本概念 3.例子(可跳过) Spark工具箱 1.Dataset ...

  3. Spark提高篇——RDD/DataSet/DataFrame(一)

    该部分分为两篇,分别介绍RDD与Dataset/DataFrame: 一.RDD 二.DataSet/DataFrame 先来看下官网对RDD.DataSet.DataFrame的解释: 1.RDD ...

  4. Spark提高篇——RDD/DataSet/DataFrame(二)

    该部分分为两篇,分别介绍RDD与Dataset/DataFrame: 一.RDD 二.DataSet/DataFrame 该篇主要介绍DataSet与DataFrame. 一.生成DataFrame ...

  5. spark结构化数据处理:Spark SQL、DataFrame和Dataset

    本文讲解Spark的结构化数据处理,主要包括:Spark SQL.DataFrame.Dataset以及Spark SQL服务等相关内容.本文主要讲解Spark 1.6.x的结构化数据处理相关东东,但 ...

  6. Spark学习之路(八)—— Spark SQL 之 DataFrame和Dataset

    一.Spark SQL简介 Spark SQL是Spark中的一个子模块,主要用于操作结构化数据.它具有以下特点: 能够将SQL查询与Spark程序无缝混合,允许您使用SQL或DataFrame AP ...

  7. Spark 系列(八)—— Spark SQL 之 DataFrame 和 Dataset

    一.Spark SQL简介 Spark SQL 是 Spark 中的一个子模块,主要用于操作结构化数据.它具有以下特点: 能够将 SQL 查询与 Spark 程序无缝混合,允许您使用 SQL 或 Da ...

  8. APACHE SPARK 2.0 API IMPROVEMENTS: RDD, DATAFRAME, DATASET AND SQL

    What’s New, What’s Changed and How to get Started. Are you ready for Apache Spark 2.0? If you are ju ...

  9. spark算子之DataFrame和DataSet

    前言 传统的RDD相对于mapreduce和storm提供了丰富强大的算子.在spark慢慢步入DataFrame到DataSet的今天,在算子的类型基本不变的情况下,这两个数据集提供了更为强大的的功 ...

  10. Spark RDD、DataFrame和DataSet的区别

    版权声明:本文为博主原创文章,未经博主允许不得转载.   目录(?)[+]   转载请标明出处:小帆的帆的专栏 RDD 优点: 编译时类型安全 编译时就能检查出类型错误 面向对象的编程风格 直接通过类 ...

随机推荐

  1. python第三方库

    autopy autopy是一个自动化操作的python库,可以模拟一些鼠标.键盘事件,还能对屏幕进行访问 pywin32 win32api的python封装 PIL python的图形图像处理框架

  2. Siddhi cep java 集成简单使用

    Siddhi 是一个开源的cep (Complex Event Processing)类库,有一个明显的例子是uber 的事件处理,具体可以google 几张参考cep 以及siddhi 图 java ...

  3. kong k8s 安装 以及可视化管理界面

    1. git  clone $ git clone git@github.com:Mashape/kong-dist-kubernetes.git $ cd kong-dist-kubernetes ...

  4. 安装系统出现Winload.exe错误0xc000000e解决方法

    有的用户在安装Win7/Win8/Win10操作系统后,重启时出现Windows 启动管理器错误,无法加载所选项,因为应用程序丢失或损坏的的故障,错误代码:0xc000000e,这是由于引导文件没有正 ...

  5. 远程复制数据免登录 rsync 和 scp

    一.备用机上(用于存放备份的机器)  和 目标机上(需要备份的服务器 ,如 246) 都需要安装 :   yum install -y rsync 二.备用机上运行命令: -t rsa Generat ...

  6. jeecg中ajax传值的前端js和后台代码

    前端js: var b=1; $.ajax({ type : "POST", --Post请求方式 url : 'orderController.do?wuliao', --路径 ...

  7. php常用字符串数组函数

    Php常用的数组函数 键值操作 Array_values($arr) 获取数据的值 Array_keys($arr) 获取数组的key Array_flip($arr) 数组键值反转 In_array ...

  8. 无法解析的外部符号 _WinMain@16

    无法解析的外部符号 _WinMain@16 Ctrl+F7 编译的时候没有错误,而F6生成解决方案的时候出现如下两个错误: 1:error LNK2019: 无法解析的外部符号 _WinMain@16 ...

  9. mui IOS权限提示框修改

    "plistcmds": [ "Set :NSContactsUsageDescription 说明读取用户通讯录的原因", "Set :NSMicr ...

  10. centos 安装 Splunk

    (1).需关闭selinux: 1. vi /etc/sysconfig/selinux    SELINUX=disabled (2).开始安装mkdir  \splunk http://downl ...