登录
首页大数据时代sparkSQL是什么,如何理解?
sparkSQL是什么,如何理解?
2020-08-11
收藏

一、sparkSQL简介

1.sparkSQL定义

sparkSQL是Spark用来处理结构化数据的一个模块,它提供了一个编程抽象叫做DataFrame并且作为分布式SQL查询引擎的作用。

2.sparkSQL来源

要想了解sparkSQL来源,必须要知道Shark。

Shark也就是Hive on Spark,Shark在HiveQL方面重用了HiveHiveQL的解析、逻辑执行计划、翻译执行计划优化等逻辑,通过HiveHiveQL解析,把HiveQL翻译成Spark上的RDD操作。Shark的设计导致了两个问题:

(1)执行计划优化完全依赖于Hive,对于添加新的优化策略很是不便;

(2)Spark是线程级并行,而MapReduce是进程级并行。Spark在兼容Hive的实现上存在线程安全问题,因而使得Shark必须使用另外一套独立维护的打了补丁的Hive源码分支;

Spark团队在汲取了shark的优点基础上,重新设计了sparkSQL,使sparkSQL在数据兼容、性能优化、组件扩展等方面有很大的提升

二、sparkSQL特点

1.数据兼容:支持从Hive表、外部数据库(JDBC)、RDD、Parquet 文件、以及JSON 文件中获取数据;

2.组件扩展:SQL 语法解析器、分析器、优化器都能够重新定义;

3.性能优化:内存列存储、动态字节码生成等优化技术,内存缓存数据;

4.多语言支持:Scala、Java、Python;

三、 DataFrame

1.DataFrame让Spark具备了处理大规模结构化数据的能力,比起原有的RDD转化方式,更加简单易用,而且计算能力也有显著提高。

RDD是分布式的Java对象的集合,但是,RDD对于对象内部结构并不可知。

DataFrame是一种以RDD为基础的分布式数据集,提供了详细的结构信息。

Spark能够轻松实现从MySQLDataFrame的转化,并且支持SQL查询。

2.创建DataFrame

 

import org.apache.spark.sql.SparkSession
val spark = SparkSession.builder().getOrCreate()
//是支持RDDs转换为DataFrames及后续sql操作
import spark.implictis._
val df = spark.read.json("file://usr/local/spark/examples/src/main/resources/people.json")
df.show()
//打印模式信息
df.printSchema()
df.select(df("name"), df("age")+1).show()
//分组聚合
df.groupBy("age").count().show()


 

数据分析咨询请扫描二维码

客服在线
立即咨询