首页 > 数据库 >SparkSQL-第二章:SparkSQL 概述

SparkSQL-第二章:SparkSQL 概述

时间:2023-01-24 13:32:12浏览次数:37  
标签:__ 对象 SparkSession DataFrame RDD 概述 SparkSQL 第二章


Spark是大数据体系的明星产品,是一款高性能的分布式内存迭代计算框架,可以处理海量规模的数据。下面就带大家来学习今天的内容!


一、SparkSQL和Hive的异同

  • Hive和Spark 均是:“分布式SQL计算引擎”
  • 均是构建大规模结构化数据计算的绝佳利器,同时SparkSQL拥有更好的性能
  • 目前,企业中使用Hive仍旧居多,但SparkSQL将会在很近的未来替代Hive成为分布式SQL计算市场的顶级

SparkSQL-第二章:SparkSQL 概述_python

二、SparkSQL的数据抽象

SparkSQL-第二章:SparkSQL 概述_spark_02

Pandas - DataFrame

  • 二维表数据结构
  • 单机(本地)集合

SparkCore - RDD

  • 无标准数据结构,存储什么数据均可
  • 分布式集合(分区)

SparkSQL - DataFrame

  • 二维表数据结构
  • 分布式集合(分区)

SparkSQL-第二章:SparkSQL 概述_数据结构_03

SparkSQL 其实有3类数据抽象对象

  • SchemaRDD对象(已废弃)
  • DataSet对象:可用于Java、Scala语言
  • DataFrame对象:可用于Java、Scala、 Python 、 R

我们以Python开发SparkSQL,主要使用的就是 DataFrame对象作为核心数据结构

三、SparkSQL数据抽象的发展

SparkSQL-第二章:SparkSQL 概述_python_04

从SparkSQL的发展历史可以看到:

  • 14年最早的数据抽象是: SchemaRDD (内部存储二维表数据结构的RDD), SchemaRDD就是魔改的RDD,将RDD支持的存储数据,限定 为二维表数据结构用以支持SQL查询。由于是魔改RDD,只是一个过渡产品,现已废弃。
  • 15年发布DataFrame对象,基于Pandas的DataFrame (模仿)独立于RDD进行实现,将数据以二维表结构进行存储并支持分布式运行
  • 16年发布DataSet对象,在DataFrame之上添加了泛型的支持,用以更好的支持Java和Scala这两个支持泛型的编程语言
  • 16年, Spark2.0版本,将DataFrame和DataSet进行合并。其底层均是DataSet对象,但在Python和R语言到用时,显示为DataFrame对象 。和老的DataFrame对象没有区别

四、DataFrame概述

SparkSQL-第二章:SparkSQL 概述_python_05

DataFrame和RDD都是:弹性的、分布式的、数据集只是, DataFrame存储的数据结构“限定”为:二维表结构化数据,而RDD可以存储的数据则没有任何限制,想处理什么就处理什么。

SparkSQL-第二章:SparkSQL 概述_spark_06

五、SparkSession对象

在RDD阶段,程序的执行入口对象是: SparkContext

在Spark 2.0后,推出了SparkSession对象, 作为Spark编码的统一入口对象。

SparkSession对象可以:

  • - 用于SparkSQL编程作为入口对象
  • - 用于SparkCore编程,可以通过SparkSession对象中获取到SparkContext

所以,我们后续的代码,执行环境入口对象,统一变更为SparkSession对象。

SparkSQL-第二章:SparkSQL 概述_sql_07

现在,来体验一下构建执行环境入口对象:SparkSession

构建SparkSession核心代码

# coding:utf8

# SparkSQL 中的入口对象是SparkSession对象
from pyspark.sql import SparkSession


if __name__ == '__main__':
# 构建SparkSession对象, 这个对象是 构建器模式 通过builder方法来构建 spark = SparkSession.builder.\
appName("local[*]").\
config("spark.sql.shuffle.partitions", "4").\
getOrCreate()
# appName 设置程序名称, config设置一些常用属性
# 最后通过getOrCreate()方法 创建SparkSession对象

六、SparkSQL HelloWorld 演示

有如下数据集:列1ID,列2学科, 列3分数

SparkSQL-第二章:SparkSQL 概述_数据结构_08

数据集文件:资料\data\sql\stu_score.txt

注意:右侧代码同学们不需要练习, 只是先体验一下SparkSQL的数据处理

需求:读取文件,找出学科为“语文”的数据,并限制输出5条,where subject = '语文' limit 5

代码如下:

# coding:utf8
# SparkSQL 中的入口对象是SparkSession对象
from pyspark.sql import SparkSession
if __name__ == '__main__':
# 构建SparkSession对象, 这个对象是 构建器模式 通过builder方法来构建
spark = SparkSession.builder.\
appName("local[*]").\
config("spark.sql.shuffle.partitions", "4").\
getOrCreate()
# appName 设置程序名称, config设置一些常用属性
# 最后通过getOrCreate()方法 创建SparkSession对象
df = spark.read.csv('../data/sql/stu_score.txt', sep=',', header=False)
df2 = df.toDF('id', 'name', 'score')
df2.printSchema()
df2.show()
df2.createTempView("score")
# SQL 风格
spark.sql("""
SELECT * FROM score WHERE name='语文' LIMIT 5
""").show()
# DSL 风格
df2.where("name='语文'").limit(5).show()

标签:__,对象,SparkSession,DataFrame,RDD,概述,SparkSQL,第二章
From: https://blog.51cto.com/u_8238263/6022247

相关文章

  • 业界三款主流的 PWA Storefront 概述
    任何电子商务解决方案都可以使用任何PWA-Ready框架进行部署,或是通过移动UI库从头开始实施。但是,后者肯定会比使用专门的产品花费更多的时间和资源。下面是电商领域三......
  • 学习笔记——拦截器与过滤器的区别;拦截器概述;拦截器中三个方法
    2023-01-21一、拦截器与过滤器的区别1、过滤器(Filter)属于web服务器组件(1)过滤器主要作用:过滤Servlet请求(2)执行时机:两处执行时机(Servlet前、Servlet后)2、拦截器(Intercep......
  • C++概述、选择结构、循环结构
    目录1C++概述1.1计算两个整数相加之和1.2计算三个整数相加之和2选择结构2.1小老鼠走迷宫1(if语句)2.2小老鼠走迷宫1(if语句)(多个单分支结构)2.3小老鼠走迷宫2(switch语句)2......
  • 学习笔记——SpringMVC消息转换器概述;使用消息转换器处理请求报文;使用消息转换器处理
    2023-01-20一、SpringMVC消息转换器概述1、HttpMessageConverter<T>消息转换器作用:(1)将java对象与请求报文及响应报文进行相互转化(2)使用HttpMessageConverter<T>将请......
  • C++概述
    计算两个整数相加之和#include<iostream>usingnamespacestd;/*函数功能:计算两个整数相加之和*/intAdd(inta,intb){return(a+b);}//主函数intmai......
  • 数据库损坏指南(1)--概述
    一、概念与类比对于数据库,它是关于存储在磁盘上的数据的格式。当数据库产品(如PostgreSQL、MySQL或MongoDB)对磁盘进行写操作时,会使用某种格式来执行。当从磁盘读取数据时......
  • 学习笔记——@PathVariable注解基本使用;@PathVariable注解属性;REST风格CRUD概述;实现PU
    2023-01-19一、@PathVariable注解基本使用1、获取URL中占位符2、占位符语法:{}3、实例代码:@RequestMapping("testPathVariable/{empId}")publicStringtestPath......
  • SAP S/4HANA Group Reporting 功能概述
    SAPGroupReporting在本地(local)和集团结算活动之间提供无缝流程,因为两者都在SAPS/4HANA核心中。本地和组结算活动也使用相同的数据库和用户界面。这加快了结算过......
  • C语言概述
    一.C语言程序初识,先介绍一个简单的C语言程序:#include<stdio.h>intarr[100000];//声明一个较大的整型数组,尽量放在函数外部/*原因是:函数内部申请的局部变量空间,来自于......
  • 中小型系统必要可行的DevOps方案概述
    本文内容是个人针对实际工作中的问题,进行的一番思考、总结,供中小型公司进行DevOps实践时作一个思路上的参考,我觉得做事情,思路很重要,抛砖引玉...背景本文主要探讨中小型公......