2024.1.7 Spark SQL , DataFrame

目录

一 . SparkSQL简介

二 . Spark SQL与HIVE的异同 

 三 . DataFrame

1. 创建 DataFrame

2. RDD转换DataFrame

四 . 操作DataFrame

 SQL方式:

DSL方式:


一 . SparkSQL简介

Spark SQL只能处理结构化数据 ,属于Spark框架一个部分  Schema:元数据信息

特点: 融合性 ,统一数据访问,hive兼容 , 标准化连接  

将hive sql翻译成Spark上对应的RDD操作 ,底层运行SparkRDD 

DataFrames是在RDD上面增加与省略了一些东西

DataFrame  =  RDD -泛型 +Schema  +方便到的SQL操作 + 优化  ,是个特殊的RDD

RDD存储任意结构数据  ;         DataFrame存储二维表结构数据

二 . Spark SQL与HIVE的异同 

1- Spark SQL是基于内存计算, 而HIVE SQL是基于磁盘进行计算的
2- Spark SQL没有元数据管理服务(自己维护), 而HIVE SQL是有metastore的元数据管理服务的
3- Spark SQL底层执行Spark RDD程序, 而HIVE SQL底层执行是MapReduce
4- Spark SQL可以编写SQL也可以编写代码,但是HIVE SQL仅能编写SQL语句

 三 . DataFrame

DataFrame表示的是一个二维的表。二维表,必然存在行、列等表结构描述信息

表结构描述信息(元数据Schema): StructType对象
字段: StructField对象,可以描述字段名称、字段数据类型、是否可以为空
行: Row对象
列: Column对象,包含字段名称和字段值

在一个StructType对象下,由多个StructField组成,构建成一个完整的元数据信息

1. 创建 DataFrame

import os
from pyspark import SparkConf, SparkContext
from pyspark.sql import SparkSession# 绑定指定的Python解释器
os.environ['SPARK_HOME'] = '/export/server/spark'
os.environ['PYSPARK_PYTHON'] = '/root/anaconda3/bin/python3'
os.environ['PYSPARK_DRIVER_PYTHON'] = '/root/anaconda3/bin/python3'if __name__ == '__main__':spark = SparkSession.builder.appName('创建DataFrame')\.master('local[*]').getOrCreate()init_df = spark.createDataFrame(data=[(1,'张三',18),(2,'李四',40),(3,'王五',60)],schema='id:int,name:string,age:int')init_df2 = spark.createDataFrame(data=[(1, '张三', 18), (2, '李四', 30),(3,'王五',60)],schema=["id","name","age"])init_df.show()'''+---+----+---+| id|name|age|+---+----+---+|  1|张三| 18||  2|李四| 30|+---+----+---+'''init_df2.show()init_df.printSchema()'''root|-- id: integer (nullable = true)|-- name: string (nullable = true)|-- age: integer (nullable = true)'''init_df2.printSchema()'''root|-- id: long (nullable = true)|-- name: string (nullable = true)|-- age: long (nullable = true)'''spark.stop()

2. RDD转换DataFrame

from pyspark import SparkConf, SparkContext
import os
from pyspark.sql import SparkSession# 绑定指定的Python解释器
from pyspark.sql.types import StructType, IntegerType, StringType, StructFieldos.environ['SPARK_HOME'] = '/export/server/spark'
os.environ['PYSPARK_PYTHON'] = '/root/anaconda3/bin/python3'
os.environ['PYSPARK_DRIVER_PYTHON'] = '/root/anaconda3/bin/python3'if __name__ == '__main__':# 1- 创建SparkSession对象spark = SparkSession.builder\.appName('rdd_2_dataframe')\.master('local[*]')\.getOrCreate()# 通过SparkSession得到SparkContextsc = spark.sparkContext# 2- 数据输入# 2.1- 创建一个RDDinit_rdd = sc.parallelize(["1,李白,20","2,安其拉,18"])# 2.2- 将RDD的数据结构转换成二维结构new_rdd = init_rdd.map(lambda line: (int(line.split(",")[0]),line.split(",")[1],int(line.split(",")[2])))# 将RDD转成DataFrame:方式一# schema方式一schema = StructType()\.add('id',IntegerType(),False)\.add('name',StringType(),False)\.add('age',IntegerType(),False)# schema方式二schema = StructType([StructField('id',IntegerType(),False),StructField('name',StringType(),False),StructField('age',IntegerType(),False)])# schema方式三schema = "id:int,name:string,age:int"# schema方式四schema = ["id","name","age"]init_df = spark.createDataFrame(data=new_rdd,schema=schema)# 将RDD转成DataFrame:方式二"""toDF:中的schema既可以传List,也可以传字符串形式的schema信息"""# init_df = new_rdd.toDF(schema=["id","name","age"])init_df = new_rdd.toDF(schema="id:int,name:string,age:int")# 3- 数据处理# 4- 数据输出init_df.show()init_df.printSchema()# 5- 释放资源sc.stop()spark.stop()

 

四 . 操作DataFrame

 SQL方式:

df.createTempView('视图名称'): 创建一个临时的视图(表名)
df.createOrReplaceTempView('视图名称'): 创建一个临时的视图(表名),如果视图存在,直接替换
临时视图,仅能在当前这个Spark Session的会话中使用


df.createGlobalTempView('视图名称'): 创建一个全局视图,运行在一个Spark应用中多个spark会话中都可以使用。在使用的时候必须通过 global_temp.视图名称 方式才可以加载到。较少使用

DSL方式:

  • show():用于展示DF中数据, 默认仅展示前20行

    • 参数1:设置默认展示多少行 默认为20

    • 参数2:是否为阶段列, 默认仅展示前20个字符数据, 如果过长, 不展示(一般不设置)

  • printSchema():用于打印当前这个DF的表结构信息

  • select():类似于SQL中select, SQL中select后面可以写什么, 这样同样也一样

  • filter()和 where():用于对数据进行过滤操作, 一般在spark SQL中主要使用where

  • groupBy():用于执行分组操作

  • orderBy():用于执行排序操作

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

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

相关文章

批量删除文件名的空格,一键清理让文件名中的空格去无踪

我们每天都会创建、下载、重命名很多文件,在文件的重命名过程中,我们会不自觉地在文件名中加入空格,这些看似无害的空格,在某些情况下,却可能引发诸多不便。例如,在某些软件或操作系统中,空格可…

Mac M1 Parallels Debian10 Install Gitlab

安装Debian10 Debian10百度网盘下载链接: https://pan.baidu.com/s/1ovBWIhTpljIVOxEkjJQjkQ?pwd6666 提取码: 6666 –来自百度网盘超级会员v7的分享 # 1.install # 2.localtion: 中国 → 语言: 中文(简体) # 3.网络 默认、自动配置 # 4.主机名域名(随意…

【数据仓库与联机分析处理】数据仓库工具Hive

目录 一、Hive简介 (一)什么是Hive (二)优缺点 (三)Hive架构原理 (四)Hive 和数据库比较 二、MySQL的安装配置 三、Hive的安装配置 1、下载安装包 2、解压并改名 3、配置环…

多时点DID

标准 DID 模型一般针对政策实施时点为同一个时期,且接受干预的状态将一直持续下去,否则 的交互项设置将会严重违背平行趋势的假设,从而导致交互项的估计系数有偏。由于现实世界中很多的政策试点地区和时间都不尽相同,而且也容易发…

unity 游戏开发中傻傻分不清URP、HDRP和SRP

文章目录 **URP (Universal Render Pipeline)**:**HDRP (High Definition Render Pipeline)**:**区别**: Unity的URP(Universal Render Pipeline)和HDRP(High Definition Render Pipeline)都是基于SRP(Scri…

深入了解Snowflake雪花算法:分布式唯一ID生成器

😄 19年之后由于某些原因断更了三年,23年重新扬帆起航,推出更多优质博文,希望大家多多支持~ 🌷 古之立大事者,不惟有超世之才,亦必有坚忍不拔之志 🎐 个人CSND主页——Mi…

go 切片长度与容量的区别

切片的声明 切片可以看成是数组的引用(实际上切片的底层数据结构确实是数组)。在 Go 中,每个数组的大小是固定的,不能随意改变大小,切片可以为数组提供动态增长和缩小的需求,但其本身并不存储任何数据。 …

安全测试之SSRF请求伪造

前言 SSRF漏洞是一种在未能获取服务器权限时,利用服务器漏洞,由攻击者构造请求,服务器端发起请求的安全漏洞,攻击者可以利用该漏洞诱使服务器端应用程序向攻击者选择的任意域发出HTTP请求。 很多Web应用都提供了从其他的服务器上…

Stable Diffusion 系列教程 - 6 Dreambooth及训练

Stable-Diffusion、Imagen等文生图大模型已经具备了强大的生成能力,假设我们的Prompt为 [Cyberpunk Style],SD或许能很快画出赛博朋克风格的一幅画。但你作为一个不知名的人,不能奢求SD在训练的时候把你自己想要的风格也加进去吧?…

『C++成长记』日期类的实现

🔥博客主页:小王又困了 📚系列专栏:C 🌟人之为学,不日近则日退 ❤️感谢大家点赞👍收藏⭐评论✍️ 目录 一、日期类的实现 📒1.1日期类功能 📒1.2拷贝日期 &#…

自动驾驶代客泊车PAVP功能规范

目录 1. 版本记录......................................................................................... 4 2. 引言................................................................................................ 5 2.1 目的/范围...............…

2023的线上事故复盘总结(OOM,数据库崩溃)持续更新中~

项目场景: 智慧门禁系统,公司研制的一个saas系统,基于Springcloud框架,主要是面向高校对老师学生的通行方式做统一的管理,可通过卡、码、脸等多种方式进出,可实现不同人员进出不同的场所,例如宿…

使用ChatGPT生成i项目需求文档模板

前言 我们在工作中需要编写的技术文档有多种形式,包括Word、Excel、PDF及一些在线形式。我们可以借助ChatGPT生成文本,然而,它不能直接生成Word、Excel、PDF等格式的文档。因此,我们需要利用其他工具来帮助我们生成一些模板&…

三、计算机理论-关系数据库-数据库的完整性与安全性,事务管理、并发控制、数据库的备份与恢复

数据库完整性 完整性是为了防止合法用户在使用数据库时向数据库中加入不符合语义的数据 实体完整性 实体完整性约束时通过主码的定义来实现的,使用PRIMARY KEY来定义,对于单个属性的主码可以使用列级完整性约束,若主码是一个属性组&#xff…

golang如何生成csv文件

在Go语言中,可以使用标准库中的"encoding/csv"包来生成CSV文件。下面是一个简单的示例代码,演示如何使用Go生成CSV文件: package mainimport ("encoding/csv""os" )func main() {// 创建一个新的CSV文件file,…

EtherCAT主站SOEM -- 14 --Qt-Soem通过界面采集从站IO进行显示

EtherCAT主站SOEM -- 14 --Qt-Soem通过界面采集从站IO进行显示 一 mainwindow.c 文件函数:1.1 自定义PDO配置1.2 主站初始化二 motrorcontrol.c 文件三 allvalue.h 文件该文档修改记录:总结一 mainwindow.c 文件函数: 1.1 自定义PDO配置 int IO_setup(uint16 slave) {int

YoloV7使用detect.py检测,结果图片不显示框

detect.py里画框部分默认是屏蔽的,需要自己打开。下图红框里屏蔽部分打开后,就显示框了。

QT上位机开发(日志调试)

【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing 163.com】 程序开发中有很多的调试方法,比如说IDE调试,也就是设置断点、查看变量等等;比如说日志调试;比如说c…

PDF控件Spire.PDF for .NET【安全】演示:获取并验证 PDF 中的数字签名

在 PDF 中创建数字签名广泛用于保护 PDF 文件。因此,当您查看一些带有数字签名的PDF文件时,需要获取并验证数字签名。本文向您展示了一种通过使用Spire.PDF和 C# 代码来获取和验证 PDF 中的数字签名的解决方案。 Spire.PDF for .NET 是一款独立 PDF 控件…

【Linux】常用的基本命令指令①

前言:从今天开始,我们逐步的学习Linux中的内容,和一些网络的基本概念,各位一起努力呐! 💖 博主CSDN主页:卫卫卫的个人主页 💞 👉 专栏分类:数据结构 👈 💯代码…