Spark SQL快速入门

news2024/11/26 19:20:53

在spark上运用SQL处理结构化数据

1、SparkSQL快速入门

1.1 什么是SparkSQL

SparkSQL 是Spark的一个模块,用于处理海量结构化数据
限定:结构化数据

1.2 为什么学习SparkSQL

SparkSQL是非常成熟的,海量结构化数据处理框架
学习SparkSQL主要在2个点

  • SparkSQL本身十分优秀,支持SQL语言,性能强,可以自动优化,API简单,兼容HIVE等
  • 企业大面积在使用SparkSQL处理业务数据
    • 离线开发
    • 数仓搭建
    • 科学计算
    • 数据分析
1.3 SparkSQL的特点

融合性
SQL可以无缝集成在代码中,随时用SQL处理书

统一数据访问
一套标准API可以读写不同的数据源

Hive兼容
可以使用SparkSQL直接计算并生成Hive数据表

标准化连接
支持标准化JDBC/ODBC 连接,方便和各种数据库进行数据交互

2、SparkSQL概述

2.1 SparkSQL和Hive异同在这里插入图片描述
2.2 SparkSQL的数据抽象

Pandas -> DataFrame -> 二维表数据结构,单机(本地)集合
SparkCore -> RDD -> 无标准数据结构,存储什么数据均可
SparkSQL -> DataFrame -> 二维表数据结构,分布式集合(分区)

在这里插入图片描述
两者都是,有分区的,分布式的,弹性的
不同在于,RDD可以存储任何类型数据。
DataFrame存储的数据结构限定为:二维表结构化数据

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

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

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

2.3 SparkSession对象

在RDD阶段,程序的执行入口对象是:SparkContext
在Spark2.0后,退出了SparkSession对象,作为Spark编码的统一入口对象。

SparkSession对象可以:

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

所以,我们后续的代码,执行环境入口对象,统一变更为SparkSession对象
在这里插入图片描述

构建SparkSession核心代码

# coding:utf8

# SparkSQL 中的入口对象是SparkSession

from pyspark.sql import SparkSession

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

	# 通过SparkSession对象 获取 SparkContext 对象
	sc = spark.sparkContext

	# SparkSQL的hello world
	df = spark.read.csv("../data/input/stu_score.txt",sep=',',header=False) # 将txt文件转换为结构化数据
	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()
	

测试数据:
在这里插入图片描述

总结

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等编程

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/393342.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

动态代理—Java

代理可以理解为请一个中间人帮忙处理一些事情。代理支持任意接口类型的实现类对象做代理,也可以直接为接本身做代理。可以为被代理对象的所有方法做代理。可以在不改变方法源码的情况下,实现对方法功能的增强。简化了编程工作、提高了软件系统的可扩展性…

QT入门Display Widgets之QLine、QLcdNumber、QTextBrowser

目录 一、QLine界面相关 1、布局介绍 2、界面基本属性 二、QLCDNumber的介绍 1、界面布局 2、定时器代码测试 三、QTextBrowser 此文为作者原创,创作不易,转载请标明出处! 一、QLine界面相关 1、布局介绍 先看下界面中创建个Q…

递归(java)

1.递归应用场景 看个实际应用场景,迷宫问题(回溯), 递归(Recursion) 2.递归的概念 简单的说: 递归就是方法自己调用自己,每次调用时传入不同的变量.递归有助于编程者解决复杂的问题,同时可以让代码变得简洁。 3.递归调用机制 我列举两个小案例,来帮助大家…

Stream——数字类型的字符串排序

文章目录前言什么是数字类型的字符串一个简单的坑demo拯救坑代码对象集合中的数字类型排序(有坑)对象集合中的数字类型排序 解决扩展将数字类型字符串数组转换为Integer集合总结前言 想到给数据进行排序,一开始头脑中想到的就是sorted(),本篇文章重点说…

SSL安全证书有什么优缺点?

在将SSL实施到您的站点之前,了解SSL的优点和缺点非常重要。下面就给大家分析下安装SSL证书有什么优缺点:优点:1. 加密信息确保您在线发送的数据只被指定的接收者读取,而不被其他人读取。SSL对原始数据进行了一些更改,因…

秒懂SpringBoot之Filter与HandlerInterceptor异同

[版权申明] 非商业目的注明出处可自由转载 出自:shusheng007 文章目录概述前置知识Filter原理及使用场景使用执行顺序设置Filter作用范围HandlerInterceptor原理及使用场景使用实现org.springframework.web.servlet.HandlerInterceptor 接口配置二者异同共同点不同点…

RocketMQ 高级特性

1,事务消息代码实现 之前我们已经在讨论订单业务消息丢失问题中引出了事务消息,本内容我们就实际用代码来实现一下事务消息吧。 首先我们用原生代码来实现一下事务消息,下面是事务消息生产者TransactionProducer类的代码,具体代码…

基于LinkedList高性能android列表适配器

1、前言 我们大部分的时候都是使用ArrayList作为Android适配器Adapter(无论是ListView或者RecyclerView)下的数据容器。为什么使用ArrayList呢?因为他的内部是由数组实现的,所以访问数组元素速度最快,但是如果数据变化…

JNI内两种方式从C/C++中传递一维、二维、三维数组数据至Java层详细梳理

目录 0 前言 1 准备工作介绍 2 一维数组 2.1 return形式 2.2 参数形式 3 二维数组 3.1 return形式 3.2 参数形式 4 三维数组 4.1 return形式 4.2 参数形式 5 测试代码 6 结果说明 0 前言 就如之前我写过的一篇文章【JNI内形参从C代码中获取返回值并返回到Java层使…

Elsevier上传LaTeX 修改稿踩坑

背景 千辛万苦修改完论文,结果发现要求上传可编辑文件,tex上传真的太难了,一堆坑,尤其是编译错误,要等系统创建pdf后才能找到。中间还打了北京的客服电话,结果他们那边并不懂相关的东西。说latex是第三方公…

C语言-基础了解-22-C文件读写

C文件读写 一、打开文件 可以使用 fopen( ) 函数来创建一个新的文件或者打开一个已有的文件,这个调用会初始化类型 FILE 的一个对象,类型 FILE 包含了所有用来控制流的必要的信息。下面是这个函数调用的原型: FILE *fopen( const char *fil…

JS中undefined和null的区别

● JavaScript 真是一个特殊的语言, 其他语言都只有一个表示 “无” 的值, 比如 Java 语言用的是 null, C 语言用的是 NULL, Python 语言用的是 None, Ruby 语言用的是 nil. 只有 JS 里面表示 “空” 的有两个, 一个是 undefined, 一个是 null ● 很多小朋友在刚开始学习的时候…

【项目设计】高并发内存池(六)[细节优化+测试]

🎇C学习历程:入门 博客主页:一起去看日落吗持续分享博主的C学习历程博主的能力有限,出现错误希望大家不吝赐教分享给大家一句我很喜欢的话: 也许你现在做的事情,暂时看不到成果,但不要忘记&…

[ 网络 ] 应用层协议 —— HTTP协议

目录 1.HTTP协议 1.1URL urlencode和urldecode 2. HTTP协议格式 HTTP请求 HTTP响应 3.告知服务器意图的HTTP方法 GET:获取资源 POST:传输实体主体 GET和POST的区别 使用Cookie的状态管理 4.返回结果的HTTP状态码 状态码告知从服务器端返回的…

十连胜!实在智能×浙江省十家农商行,数字科技赋能普惠金融

近日,中共中央、国务院印发了《数字中国建设整体布局规划》(以下简称《规划》)。《规划》指出,建设数字中国是数字时代推进中国式现代化的重要引擎,是构筑国家竞争新优势的有力支撑。全面提升数字中国建设的整体性、系…

C语言-基础了解-23-C预处理器

C预处理器 一、C预处理器 C 预处理器不是编译器的组成部分,但是它是编译过程中一个单独的步骤。简言之,C 预处理器只不过是一个文本替换工具而已,它们会指示编译器在实际编译之前完成所需的预处理。我们将把 C 预处理器(C Prepr…

spring-security2

参考b站up主:传送门 前沿 : 回顾上章:最顶层就是一个过滤器 SpringSecurity流程:FilterChainProxy->根据请求决定一个 SecurityFilterChain (挨个调用其matches方法 匹配请求能否处理)-> 执行SecurityFilterChain中的一系列…

Java简单认识泛型——图文详解

写在开头:想必大家和博主一样,在以往学习JavaSE的语法中,遇到了一个陌生的词——泛型,博主当时很好奇,什么是泛型呢?即使是学完了JavaSE,这个问题都没有解决,只能在百度查阅了解关于泛型的一些皮…

Maven依赖的基本概念

目录 1.依赖的基本配置 2.依赖范围 3.传递性依赖 1.依赖的基本配置 根元素project下的dependencies可以包含多个 dependence元素,以声明多个依赖。每个依赖都应该包含以下元素: 1. groupId, artifactId, version : 依赖的基本坐标, 对于任…

【C和C++】输出100内能够被13整除的数,取模判断方法

目录 前言基础概念重温整除例子小知识点收尾前言 在软件行业已经有快十年,技术虽然一般般,但是足够应付和解决编程入门的相关问题! 都说十年磨一剑,积累到一定经验,是时候发挥自己的价值,给予入门的同行些许的帮助! 为什么要写收费专栏,其实原因很简单,时间就是金钱(…