在spark中,前面的系列操作可以让我们自由的操作各种rdd的数据,从本篇文章开始,我们开始介绍更加简化理解和开发的模块,即Spark Sql数据抽象。
Spark Sql可以看作是把以前的rdd再进行了一次抽象,即我们底层不需要再关注和编写太多map-reduce等等,而是像编写sql一样的操作所有的rdd数据。这样子在写代码的时候就非常的简单,同时对于数据操作的理解也更加直白。
备注:上面我们说操作的rdd数据,在spark2.0之后,这里操作的都是dataframe的数据。
Spark Sql提供了哪些功能?
1、spark sql提供了DataFrame/Dataset数据抽象,以简化使用结构化数据集的工作。在形式上看来,DataFrame/Dataset可以看做是关系型数据库中的表。
2、spark sql可以可以读写各种结构化格式的数据,例如:json格式,hive表等。
3、spark sql允许在spark程序内部和通过标准数据库连接器(JDBC/ODBC)链接到spark sql的外部工具中使用sql查询数据。(这块后面我们会用案例来讲解)/
Spark sql主要操作的数据抽象有哪些?
在spark中主要操作的数据抽象有:DataFrame和Dataset,在spark sql中提供有DataFrameAPI和DatasetAPI供用户操作,在spark2.x之后,DatasetAPI与DataFrameAPI进行了合并,所以在spark2.x之后的版本里面,我们只操作DataFrameAPI即可。
Spark Sql中DataFrameAPI有哪些特性?
1、内置对各种数据格式的支持,如 Parquet、Hive 和 JSON。尽管如此,通过 Spark SQL 的外部数据源 API,DataFrames 可以访问各种各样的第三方数据源,如数据库和 NoSQL 存储。
2、提供了更健壮、功能丰富的 DSL(特定领域语言),它的功能是为常见任务设计的,例如:元数据、抽样、关系数据处理—投影、过滤、聚合、连接、UDF(用户自定义函数)
备注:在spark2.x之后,操作spark sql由现在的DataFrameAPI替换掉了RDD操作,在DataFrameAPI上,他提供了两个高级的特性用以提升sql的执行效率,具体有:
1、自定义内存管理(又名 Project Tungsten)
数据以二进制格式存储在堆外内存中(off-heap memory)。这节省了大量的内存空间。此外,也不涉及垃圾收集开销。通过提前了解数据的模式并有效地以二进制格式存储,还可以避免昂贵的 Java 序列化。
2、优化的执行计划(又名 Catalyst Optimizer)
使用 Spark catalyst optimiser 创建用于执行的查询计划。在经过一些步骤准备好优化的执行计划之后,最终的执行仅在 rdd 内部进行,但这对用户是完全隐藏的。
还没有评论,来说两句吧...