SparkSQL的数据结构DataFrame构建方式(Python语言)

news2024/12/25 9:29:45

SparkSQL 是Spark的一个模块, 用于处理海量结构化数据,其提供了两个操作SparkSQL的抽象,分别是DataFrame和DataSet,spark2.0之后,统一了DataSet和DataFrame,以后只有DataSet。

Python、R语言开发Spark,使用没有泛型的DataSet,即DataFrame结构。Java、Scala语言开发Spark,既可以使用带泛型的DataSet数据结构,也可以使用不带泛型的DataFrame数据结构

DataFrame是一种以RDD为基础的分布式数据集,类似于传统数据库的二维表格,带有Schema元信息(可以理解为数据库的列名和类型)

RDD、DataFrame、DataSet的区别
在这里插入图片描述
RDD: 存储的直接就是对象, 比如在图中, 存储的就是一个Person的对象
DataFrame:提供了详细的结构信息schema列的名称和类型
DataSet:Preston对象中数据按照结构化方式存储, 同时保留对象的类型,

1.定义元数据

schema = StructType() \
        .add(StructField('name', StringType(), nullable=True)) \
        .add(StructField('age', IntegerType(), nullable=True))
schema = StructType(fields=[
        StructField('name', StringType(), True),
        StructField('age', IntegerType(), True)
    ])

2.转DataFrame

要保证每一个元素的类型应该为 列表/元组/字典类型, 否则在转换为DF的时候, 无法识别

df = scRdd.toDF(schema=schema)
df = scRdd.toDF(schema='name string,age integer')
df = scRdd.toDF(schema=['name', 'age'])

3.创建DataFrame

sparkContext rdd对象、pandas dataFrame对象作为参数传给函数createDataFrame,直接创建对象

df = sparkSession.createDataFrame(
				data=scRdd, 
				schema=schema)

df = sparkSession.createDataFrame(
				data=pandasDF, 
				schema='name string,age integer')

df = spark.createDataFrame(
				data=[('李四',20),('张三',18),('王五',25)],
            	schema='name,age' )

4.DataFrame接收外部文件

采用Text读取方式来读取外部文件的数据, 仅会产生一列数据,一行数据为一列, 默认的列名为value 支持修改列名. 数据类型必须是String

df = ss.read.format("text").schema("line string").load(path='file:///data/stu.txt')

CSV 是可以读取多列的数据, 默认会根据逗号进行切割处理, 一个作为一列来展示

CSV相关的参数说明:
sep: 指定字段之间的分隔符号, 默认为逗号
header: 是否存在头信息, 默认为False. 如果为True, 表示将文件的第一行作为表头
inferSchema: 是否自动识别字段的类型, 默认为False
encoding: 读取数据的编码集, 默认为UTF-8

 df = ss.read.format('csv')
 .schema('id int,dept_name string')
 .option('sep', ',')
 .option('header', True) \
 .option('inferSchema', False) \
 .option('encoding', 'utf-8') \
 .load(path='file:///data/stu.txt')        

另一种写法:

ss.read.csv(
        schema='id int,dept_name string',
        seq=',',
        load='file:///data/stu.txt',
        header=True,
        inferSchema=False,
        encoding='utf-8'
    )

读取JSON文件,也支持多列读取,当没有设置shcema的时候,自动识别文件数据,将key当作字段名称。

也支持自定义schema信息,但设置的字段名称要和文件中的key值保持一致,否则无法匹配。同时可以基于shema约束字段顺序

json字符串结构化的时候,字段没有值的用null代替

df = ss.read.json(
        schema='id int,name string,address string,age int',
        path='file:///export/data/remote_pyspark_workspace/data/stu.json'
    )

5.参考

Spark RDD 构建
Pandas构建DataFrame的几种方式

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

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

相关文章

BurpSutie拓展插件推荐-原始模块增强插件

为方便您的阅读,可点击下方蓝色字体,进行跳转↓↓↓ 01 Logger(1)工具介绍(2)下载地址(3)使用说明 02 HAE(1)工具介绍(2)下载地址&…

【C语言static关键字】

C语言static关键字 C语言之static1、什么是static?2、static的意义3、C/C static的属性4、static的用法4.1、static修饰局部变量例程4.2、static修饰全局变量例程4.3、static修饰函数例程 5、结束语 C语言之static 前言: 先简单了解下“三大区”&#x…

数据人一直做这四项工作,即使不被BI、AI取代,也躲不过35危机!

先说我的观点:数据分析职业不会被BI软件替代。顺便说一句,数据分析职业也不会被chatgpt取代。 大家首先要搞清楚:取代人的从来不是工具,而是会使用工具的人。 数据分析师工作内容 首先,先让我们来全面拆解一下国内数…

聊聊极限编程与测试启发

这是鼎叔的第六十五篇原创文章。行业大牛和刚毕业的小白,都可以进来聊聊。 欢迎关注本公众号《敏捷测试转型》,星标收藏,大量原创思考文章陆续推出。 继续聊聊著名的敏捷研发框架:极限编程。 极限编程(Extreme Prog…

从腾讯、阿里、联想的ESG报告,看数字企业发展的「碳门槛」

从“互联网”到“数字化”,再到“ESG”。数字化不仅帮助企业打开了从传统到现代化的通路,也帮助企业打开了从无序到环保、通往低碳的大门。 作者|斗斗 编辑|皮爷 出品|产业家 一年一度的ESG报告披露正在来临。 腾讯发布2022年ESG(即“…

一天掌握latex论文编辑,从标题作者,段落,数学公式,图片,图表,到参考文献全流程

目录 以下是一个基于SCI模板的完整LaTeX论文示例,包含注释说明 1. 创建文档: 2. 标题和作者信息: 3. 段落和文本格式: 4. 列表: 5.图片和表格: 5.1插入图片 5.2 插入表格 5.2.1 示例1 :…

计算机组成原理基础复习题(无答案版)

本套题无答案,整理出来适合大家完成课堂学习后,边翻书边对照题目检索答案,加深印象。 目录 一、选择题 二、填空题 三、简答题 四、设计题 一、选择题 1、完整的计算机系统应包括( )。 A. 运算器、存储器和控制器…

【C#】医学检验系统(LIS)源码

一、医学检验系统(Laboratory Information Management System 简称:LIS)LIS是HIS系统的一个重要的组成部分,其主要功能是将检验的实验仪器传出的检验数据经分析后,生成检验报告,通过网络存储在数据库中&…

《操作系统》- 线程与进程

目录 一、进程的概念二、进程的结构和特征2.1 进程的结构2.2 进程的特征 三、线程的概念四、进程和线程比较五、线程的实现方式 一、进程的概念 程序放在磁盘上不叫做进程,只有运行起来之后才叫做进程,进程进程就是进行中的程序!一次运行就会…

spring boot security使用jwt认证

前言 在前面的几篇文章中: spring boot security快速使用示例 spring boot security之前后端分离配置 spring boot security自定义认证 spring boot security验证码登录示例 基本对常用的基于cookie和session的认证使用场景都已覆盖。但是session属于有状态认证&am…

GAMES101笔记 Lecture10 Geometry1 (Introduction)

目录 Application for Texture(纹理的应用)Environment Map(环境光贴图)Spherical Environment Map(球形环境光贴图)Cube Map(立方体贴图) Texture can affect shading!(纹理可以作用于着色)How to perturb the normal (in flatland)(如何计算法线如何变化呢?)Displ…

《AutoSar实战》读写DID之三:代码实现

文章目录 前言一、检查生成的接口以及数据类型1. 读DID函数接口生成2. 写DID函数接口生成3. 写NvM接口生成4. RAM数组生成 二、代码编写1. 读DID2. 写DID 总结 前言 本系列主要基于DaVinCi工具链来展开具体DID读写的配置以及最终实现。 DID读写功能实现流程包括如下几点&#…

行走江湖,一最多的行

本篇博客会讲解力扣“2643. 一最多的行”的解题思路,这是题目链接。 本题的思路是:从上到下遍历二维数组,统计每一行1的个数。使用ret数组的第一个元素维护1最多的行的下标,第二个元素维护最多的1的个数。若发现某一行的1的个数比…

kettle取昨天时间设置任意时间变量

文章目录 kettle取昨天时间&设置任意时间变量设置系统信息增加常量计算器设置变量 总结 kettle取昨天时间&设置任意时间变量 kettle 版本7.1,如下图所示: 所需要组件:1 获取系统信息; 2 增加常量; 3 计算器; 4设置变量 结果可以用于…

yolov8源码解读(part2: 检测,分割)

本文解读下图框中的detection部分 和 没有画出来的分割部分。 注意每个模块右上角的数字,它代表第几个模块, 现在检测和分割的输入都是15, 18, 21个模块的输出(图中圆圈处)。 在代码解读的时候会用[15,18,21]提示需要用到15, 18, 21个模块的输出。 yolov8的实例分割用了y…

Pandas包构建DataFrame的几种方式

1. Pandas Pandas是python的一个第三方包,是一个结构化数据工具集,能够更加灵活、快速的对数据进行清洗和处理,适用于单击大数据量的数据分析和数据开发 使用pandas包之前,首先安装 pip install -i https://pypi.tuna.tsinghua.…

【STM32】STM32G系列使用CORDIC模块加速计算

1.前言 STM32G431系列产品内置了CORDIC运算单元,可以用来加速数学计算,如三角函数、取模、开方等。适合大量数据进行相同的运算操作。配合DMA可以大大节省CPU计算开销。 2.CubeMX配置 使用CORDIC模块无需配置参数,若采用DMA方式则只需配置…

JavaWed第三章:JavaScript的全面知识

目录 前言 一.JavaScript的简介 💖概念 💖学习内容 二.JavaScript的引入方式 💖内部脚本 💖外部脚本 三.JavaScript的基础语法 💖语法的书写 💖变量 ✨ 全局变量 ✨局部变量 ✨常量 &a…

Vue3使用$refs获取节点生产环境undefined-使用getCurrentInstance-ctx应改用proxy

vue3项目,在使用refs获取节点,开发环境正常,生产环境报错 console.log(getCurrentInstance()) internalInstance.ctx, internalInstance.proxy 开发环境正常-生产环境报错 internalInstance.ctx 生产环境获取不到值 ctx打包后在生产环境下是获…