第56课:Spark SQL和DataFrame的本质

一、Spark SQL与Dataframe

Spark SQL之所以是除Spark core以外最大和最受关注的组件的原因:

a) 能处理一切存储介质和各种格式的数据(你同时可以方便的扩展Spark SQL的功能来支持更多的数据类型,例如KUDO)

b)Spark SQL 把数据仓库的计算能力推向了一个新的高度。不仅是无敌的计算速度(Spark SQL比Shark快了一个数量级,Shark比Hive快了一个数量级),尤其是在tungsten成熟以后会更加无可匹敌。更为重要的是把数据仓库的计算复杂度推向了历史新高度(Spark后续推出的Dataframe可以让数据仓库直接使用机器学习、图计算等算法库来对数据仓库进行深度数据价值的挖掘)。

c)Spark SQL(Dataframe,DataSet)不仅是数据仓库的引擎,同时也是数据挖掘的引擎,更为重要的是Spark SQL是科学计算和分析的引擎。

d)后来的DataFrame让Spark SQL一举成为大数据计算引擎的技术上的霸主(尤其是在钨丝计划的强力支持下)。

e) Hive+Spark SQL+DataFrame

1) Hive负责廉价的数据存储

2) Spark SQL 负责高速的计算

3)DataFrame 负责复杂的数据挖掘

二、DataFrame与RDD

a)R和Python中都有DataFrame,Spark中的DataFrame从形式上看,最大的不同点就是其天生是分布式的;你可以简单的认为DataFrame是一个分布式的Table,形式如下:

Name Age Tel
String Int Long
String Int Long
String Int Long
String Int Long
String Int Long
String Int Long

而RDD的形式如下:

Person
Person
Person
Person
Person
Person

RDD不知道数据行的属性,而DataFrame知道数据的列信息

b)RDD和DataFrame的根本差异

RDD以record为基本单位,Spark在处理RDD时无法优化RDD的内部细节,所以也就无法进行更深入的优化,这极大的限制了Spark SQL的性能。

DataFrame中包含了每个record的metadata信息,也就是说DataFrame优化时基于列内部优化,而不像RDD基于行进行优化。

三、Spark企业级最佳实践

阶段1 文件系统+C语言处理

阶段2 JavaEE + 传统数据库(扩展性太差,不支持分布式。即便有部分数据库支持分布式,但是因为事务一致性的关系,速度非常慢)

阶段3 Hive hive的计算能力有限,速度非常慢。

阶段4 Hive转向Hive+Spark SQL

阶段5 Hive+Spark SQL+DataFrame

阶段6 Hive+Spark SQL+DataFrame+DataSet

时间: 2024-10-22 08:45:50

第56课:Spark SQL和DataFrame的本质的相关文章

转】Spark SQL 之 DataFrame

原博文出自于: http://www.cnblogs.com/BYRans/p/5003029.html 感谢! Spark SQL 之 DataFrame 转载请注明出处:http://www.cnblogs.com/BYRans/ 概述(Overview) Spark SQL是Spark的一个组件,用于结构化数据的计算.Spark SQL提供了一个称为DataFrames的编程抽象,DataFrames可以充当分布式SQL查询引擎. DataFrames DataFrame是一个分布式的数据

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

本文讲解Spark的结构化数据处理,主要包括:Spark SQL.DataFrame.Dataset以及Spark SQL服务等相关内容.本文主要讲解Spark 1.6.x的结构化数据处理相关东东,但因Spark发展迅速(本文的写作时值Spark 1.6.2发布之际,并且Spark 2.0的预览版本也已发布许久),因此请随时关注Spark SQL官方文档以了解最新信息. 文中使用Scala对Spark SQL进行讲解,并且代码大多都能在spark-shell中运行,关于这点请知晓. 概述 相比于

Spark修炼之道(进阶篇)——Spark入门到精通:第十三节 Spark Streaming—— Spark SQL、DataFrame与Spark Streaming

主要内容 Spark SQL.DataFrame与Spark Streaming 1. Spark SQL.DataFrame与Spark Streaming 源码直接参照:https://github.com/apache/spark/blob/master/examples/src/main/scala/org/apache/spark/examples/streaming/SqlNetworkWordCount.scala import org.apache.spark.SparkConf

Spark SQL and DataFrame Guide(1.4.1)——之Data Sources

数据源(Data Sources) Spark SQL通过DataFrame接口支持多种数据源操作.一个DataFrame可以作为正常的RDD操作,也可以被注册为临时表. 1. 通用的Load/Save函数 默认的数据源适用所有操作(可以用spark.sql.sources.default设置默认值) 之后,我们就可以使用hadoop fs -ls /user/hadoopuser/在此目录下找到namesAndFavColors.parquet文件. 手动指定数据源选项 我们可以手动指定数据源

Spark SQL 中 dataFrame 学习总结

dataFrame多了数据的结构信息.就是schema. RDD是分布式的 Java对象的集合.DataFrame是分布式的Row对象的集合. DataFrame 提供了详细的结构信息,可以让sparkSQL清楚的知道数据集中包含哪些列,列的名称和类型各是什么? RDD是分布式的 Java对象的集合.DataFrame是分布式的Row对象的集合.DataFrame除了提供了 比RDD更丰富的算子以外,更重要的特点是提升执行效率.减少数据读取以及执行计划的优化,比如 filter下推.裁剪等. 提

Spark SQL and DataFrame Guide(1.4.1)——之DataFrames

Spark SQL是处理结构化数据的Spark模块.它提供了DataFrames这样的编程抽象.同一时候也能够作为分布式SQL查询引擎使用. DataFrames DataFrame是一个带有列名的分布式数据集合.等同于一张关系型数据库中的表或者R/Python中的data frame,只是在底层做了非常多优化:我们能够使用结构化数据文件.Hive tables,外部数据库或者RDDS来构造DataFrames. 1. 開始入口: 入口须要从SQLContext类或者它的子类開始,当然须要使用S

Spark SQL和DataFrame的学习总结

1.DataFrame 一个以命名列组织的分布式数据集.概念上相当于关系数据库中一张表或在R / Python中的data frame数据结构,但DataFrame有丰富的优化.在spark 1.3之前,核心的新类型为RDD-schemaRDD,现改为DataFrame.spark 通过DataFrame操作大量的数据源,包括外部文件(如 json.avro.parquet.sequencefile 等等).hive.关系数据库.cassandra等. DataFrame与RDD区别: RDD以

Spark SQL中Dataframe join操作含null值的列

当在Spark SQL中对两个Dataframe使用join时,当作为连接的字段的值含有null值.由于null表示的含义是未知,既不知道有没有,在SQL中null值与任何其他值的比较(即使是null)永远不会为真.故在进行连接操作时null == null不为True,所以结果中不会出现该条记录,即左侧表格的这条记录对应右侧的值均为null.示例如下: table_a: date serverId lvSection 2018-03-04 1 10 2018-03-05 null 9 2018

Spark SQL 之 Join 实现

原文地址:Spark SQL 之 Join 实现 Spark SQL 之 Join 实现 涂小刚 2017-07-19 217标签: spark , 数据库 Join作为SQL中一个重要语法特性,几乎所有稍微复杂一点的数据分析场景都离不开Join,如今Spark SQL(Dataset/DataFrame)已经成为Spark应用程序开发的主流,作为开发者,我们有必要了解Join在Spark中是如何组织运行的. SparkSQL总体流程介绍 在阐述Join实现之前,我们首先简单介绍SparkSQL