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. 【java基础】java集合系列之HashMap

    Hashmap是一种非常常用的.应用广泛的数据类型,最近研究到相关的内容,就正好复习一下.网上关于hashmap的文章很多,但到底是自己学习的总结,就发出来跟大家一起分享,一起讨论. 1.hashma ...

  2. MySQL中地理位置数据扩展geometry的使用心得

    最近学习了些MySQL geometry数据存储和计算,在这里记录下. 1. 环境 geometry推荐在5.6版本以上使用,尽管大部分功能在5.5已经可用,除了距离计算函数st_distance等新 ...

  3. docker swarm mode routing mesh 使用

    Docker Engine swarm mode makes it easy to publish ports for services to make them available to resou ...

  4. Kubernetes Helm

    Helm is a tool for managing Kubernetes charts. Charts are packages of pre-configured Kubernetes reso ...

  5. ASP.NET比较常用的26个性能优化技巧

    1. 数据库访问性能优化 数据库的连接和关闭 访问数据库资源需要创建连接.打开连接和关闭连接几个操作.这些过程需要多次与数据库交换信息以通过身份验证,比较耗费服务器资源.ASP.NET中提供了连接池( ...

  6. 干净的 js测试页面

    <!DOCTYPE html><html lang="en" > <head> <meta charset="utf-8&quo ...

  7. Range(转)

    原文链接:http://www.cnblogs.com/peida/p/Guava_Range.html 在Guava中新增了一个新的类型Range,从名字就可以了解到,这个是和区间有关的数据结构.从 ...

  8. 简单的SOCKET例子

    定义实例socket.socket(),如果括号里不写参数,默认为IPV4+TCP 我们猜测客户端的完整代码如下: 同样我们猜测服务端的代码如下: 实际上运行客户端代码: 说明在py3里,网络编程发送 ...

  9. python学习(二十三) String(下) 分片和索引

    分片: 记住, 是开闭区间. a = "abcdef"print(a[:])print(a[1:])print(a[:3])print(a[-2])print(a[:-2])pri ...

  10. 【BZOJ】2657: [Zjoi2012]旅游(journey)(树的直径)

    题目 传送门:QWQ 分析 在任意两个不相邻的点连一条线,求这条线能穿过几个三角形. 建图比较讲究(详见代码) 求树的直径. 代码 #include <bits/stdc++.h> usi ...