SparkSql概述
SparkSql是Spark的一个模块,用于处理海量结构化数据。
SparkSql的特点
-
融合性: Spark SQL 无缝集成代码,支持编程语言与 SQL 查询的结合。
-
统一数据访问: 提供标准 API,统一处理不同数据源。
-
Hive 支持: 可运行 Hive 查询,生成报表,无需额外配置。
-
标准化连接: 支持 JDBC/ODBC,便于与各类数据库交互。
Spark发展历程
在许多年前(2012\2013左右)Hive逐步火热起来,大片抢占分布式SQL计算市场
Spark作为通用计算框架,也不可能放弃这一细分领域。
于是,Spark官方模仿Hive推出了Shark框架(Spark 0.9版本)
Shark框架是几乎100%模仿Hive,内部的配置项\优化项等都是直接模仿而
来.不同的在于将执行引擎由MapReduce更换为了Spark.
因为Shark框架太模仿Hive, Hive是针对MR优化,很多地方和
SparkCore(RDD)水土不服,最终被放弃
Spark官方下决心开发一个自己的分布式SQL引擎,也就是诞生了现在的
SparkSQL
SparkSql与Hive的区别
SparkSql的数据抽象
SparkSql共有三种数据结构抽象,分别是:
SchemaRDD对象(早期结构,已弃用)
DataSet对象(支持,Java和Scala语言使用)
DataFrame对象(不支持泛型,Java,Scala,Pyhton,R语言均可使用)
DataFrame概述
DataFrame 是 Spark SQL 中的核心抽象,类似关系型数据库的表,支持分布式存储和复杂数据操作。它无泛型,适用于 Java、Scala、Python、R,广泛应用于数据分析和查询,提供高效的内存管理与优化。
DataFrame 是一种表示结构化数据的二维数据结构,类似数据库表。它包含行和列,支持复杂数据类型(如数组、结构体),从而实现嵌套和复杂结构的数据表示,灵活处理半结构化数据。
SparkSession
在RDD阶段,程序的执行入口对象是:SparkContext
在Spark 2.0后,推出了SparkSession对象,作为Spark编码的统一入口对象。
SparkSession对象可以:
- 用于SparkSQL编程作为入口对象
- 用于SparkCore编程,可以通过SparkSession对象中获取到SparkContext
from pyspark.sql import SparkSession
if __name__== "__main__":
spark=SparkSession.builder.\
appName("test").\
master("local[*]").\
getOrCreate()
# 通过SparkSession获得SparkContext对象
sc=spark.sparkContext
# helloworld
df = spark.read.csv(r"D:\Google Downloads\file.csv", header=False, inferSchema=True)
df1=df.toDF("id","name","phone")
df1.printSchema()
df1.show()
# SparkSql风格
df1.createTempView("test")
spark.sql("select * from test").show()
# DSL风格
df1.where("id==1").show()
总结
-
SparkSQL 和 Hive同样,都是用于大规模SQL分布式计算的计算框架,均可以运行在YARN之上,在企业中广泛被应用
-
SparkSQL的数据抽象为:SchemaRDD(废弃)、DataFrame(Python、R、Java、Scala)、DataSet(Java、Scala)。
-
DataFrame同样是分布式数据集,有分区可以并行计算,和RDD不同的是,DataFrame中存储的数据结构是以表格形式组织的,方便进行SQL计算
-
DataFrame对比DataSet基本相同,不同的是DataSet支持泛型特性,可以让Java、Scala语言更好的利用到。
-
SparkSession是2.0后退出的执行环境入口对象,可以用于RDD、SQL等编程