博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Spark之 SparkSql、DataFrame、DataSet介绍
阅读量:4555 次
发布时间:2019-06-08

本文共 2013 字,大约阅读时间需要 6 分钟。

SparkSql

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

特性:

1、易整合    可以将sql查询与spark应用程序进行无缝混合使用,同时可以使用java、scala、python、R语言开发代码2、统一的数据源访问    sparksql可以使用一种相同的方式来对接外部的数据源    val dataframe=SparkSession.read.格式("该格式文件的路径")3、兼容hive    可以通过sparksql来操作hivesql4、支持标准的数据库连接    可以通过使用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 优点    1、编译时类型安全        也就是说后期开发代码的时候会进行类型的检查    2、具有面向对象编程的风格        可以通过对象调用方法 缺点    1、数据序列化和反序列化性能开销很大。        数据在进行网络传输的时候,先要进行序列化,后续又需要进行反序列化这些操作都是在内存中进行    2、频繁的对象的创建会带来GC(jvm内存回收机制:垃圾回收),GC处理的时候,其他进程都会暂停。
DataFrame 优点    DataFrame引入了schema和off-heap    1、schema就是对于DataFrame数据的结构信息进行描述        在进行数据序列化的时候,就不需要针对于数据的结构进行序列化了,直接把数据本身进行序列化就可以了,减少数据的网络传输。            解决了RDD在数据进行序列化和反序列化性能开销很大这个缺点。    2、off-heap不在使用jvm堆中的内存来构建大量的对象,而是直接使用操作系统层面上的内存        解决了RDD在堆中频繁创建大量的对象造成GC这个缺点。 缺点    DataFrame引入了schema和off-heap解决了RDD的缺点,同时也丢失了RDD的优点    1、编译时不在是类型安全    2、也不具备面向对象编程这种风格

创建DataFrame的几种方式

读取文本文件

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

读取json文件

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

读取parquet文件

val df=spark.read.parquet("/users.parquet")df.printSchemadf.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)

 

转载于:https://www.cnblogs.com/blazeZzz/p/9850993.html

你可能感兴趣的文章
[kuangbin带你飞]专题六 最小生成树 J - Borg Maze
查看>>
[kuangbin带你飞]专题六 最小生成树 I - Agri-Net
查看>>
[kuangbin带你飞]专题六 最小生成树 K - The Unique MST (判断最小生成树是否唯一)...
查看>>
[kuangbin带你飞]专题六 最小生成树 L - 还是畅通工程 (简单最小生成树)
查看>>
计蒜客 最长不下降子序列 (贪心+二分nlogn算法)
查看>>
[kuangbin带你飞]专题十二 基础DP1 C - Monkey and Banana HDU - 1069
查看>>
Relatives POJ - 2407(不打表的欧拉函数 单求)
查看>>
[kuangbin带你飞]专题十六 KMP & 扩展KMP & Manacher A - Number Sequence HDU - 1711 (kmp)
查看>>
[kuangbin带你飞]专题十六 KMP & 扩展KMP & Manacher F - The Minimum Length HUST - 1010 (kmp循环节)...
查看>>
C - Aladdin and the Flying Carpet LightOJ - 1341 (唯一分解,素数筛法,因子个数)
查看>>
七夕节 HDU - 1215 (唯一分解 素数筛法 因子之和加强版)
查看>>
[kuangbin带你飞]专题十六 KMP & 扩展KMP & Manacher I - Blue Jeans POJ - 3080 (找多个字符串的最长公共子序列,字典序最小)...
查看>>
F - Goldbach`s Conjecture LightOJ - 1259(素数筛)
查看>>
[kuangbin带你飞]专题十六 KMP & 扩展KMP & Manacher J - Simpsons’ Hidden Talents HDU - 2594(kmp前后缀)...
查看>>
[kuangbin带你飞]专题十六 KMP & 扩展KMP & ManacherC - 剪花布条 HDU - 2087 (kmp不覆盖匹配)...
查看>>
统计难题 HDU - 1251(字典树)
查看>>
[kuangbin带你飞]专题十六 KMP & 扩展KMP & Manacher :G - Power Strings POJ - 2406(kmp简单循环节)...
查看>>
Let the Balloon Rise HDU - 1004 (字典树和map两种写法)
查看>>
[kuangbin带你飞]专题十六 KMP & 扩展KMP & ManacherK - Count the string HDU - 3336(前缀数量问题)...
查看>>
2019百度之星初赛一1001Polynomial(数学的函数收敛)
查看>>