SparkSql

chenxin
5
2024-11-04

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()

总结

  1. SparkSQL 和 Hive同样,都是用于大规模SQL分布式计算的计算框架,均可以运行在YARN之上,在企业中广泛被应用

  2. SparkSQL的数据抽象为:SchemaRDD(废弃)、DataFrame(Python、R、Java、Scala)、DataSet(Java、Scala)。

  3. DataFrame同样是分布式数据集,有分区可以并行计算,和RDD不同的是,DataFrame中存储的数据结构是以表格形式组织的,方便进行SQL计算

  4. DataFrame对比DataSet基本相同,不同的是DataSet支持泛型特性,可以让Java、Scala语言更好的利用到。

  5. SparkSession是2.0后退出的执行环境入口对象,可以用于RDD、SQL等编程

动物装饰