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

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.hqwc.cn/news/8392.html

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

相关文章

SpringBoot 的 概念、创建和运行

目录 1.什么是Spring Boot? 为什么要学Spring Boot? SpringBoot的优点 Spring Boot 项目创建 前置工作:配置国内源 使用 idea 创建 Spring Boot 项目 网页版创建(了解) 拓展:删除 项目中无用的目录和…

quiche编译

netty http3使用了rust语言的quiche,quiche使用了c语言的boringssl, 网上没有找到编译好的quiche,只能自己搭建rust环境编译 1、rust安装 见官网https://www.rust-lang.org/tools/install 我是用的是windows的ubuntu,所以直接使…

web学习--maven--项目管理工具

写在前面: 这学期搞主攻算法去了,web的知识都快忘了。开始复习学习了。 文章目录 maven介绍功能介绍maven安装jar包搜索仓库 pom文件项目介绍父工程依赖管理属性控制可选依赖构建 依赖管理依赖的传递排除依赖可选依赖 maven生命周期分模块开发模块聚合…

debian linux安装配置企业私有网盘

一、适用环境 1、中小型企业的某些部门之间经常要进行数据的交换与共享时,则可使用企业内部专业的服务器,把剩余的硬盘存储容量配置成为共享网盘的形式,供部门之间进行数据交换。 2、可将多个硬盘通过debian Linux系统组成软阵列的1个逻辑盘…

【Matlab】神经网络遗传算法(BP-GA)函数极值寻优——非线性函数求极值

目前关于神经网络遗传算法函数极值寻优——非线性函数求极值的博客资源已经不少了,我看了下来源,最初的应该是来自于Matlab中文论坛,论坛出版的《MATLAB神经网络30个案例分析》第4章就是《神经网络遗传算法函数极值寻优——非线性函数极值寻优…

一次源码编译安装PostgreSql失败

需要perl;之前博文已提到;之前有一种编程语言叫perl,此perl应该不是那个;可到其官网下载,Perl Download - www.perl.org 安装时添加到环境变量; 可能是一个东西;有编程语言和工具;大…

Python爬虫使用代理IP的实现

使用爬虫时,如果目标网站对访问的速度或次数要求较高,那么你的 IP 就很容易被封掉,也就意味着在一段时间内无法再进行下一步的工作。这时候代理 IP 能够给我们带来很大的便利,不管网站怎么封,只要能找到一个新的代理 I…

在 TypeScript 中有效地使用 keyof 和 typeof 来表示类型

在本文中,我们将学习如何通过组合类型运算符和枚举来提取和声明常量类型typeof,以使您的代码库得到优化。keyof 先决条件 为了获得更好的编码体验,您应该在 IDE 中安装 TypeScript,例如VSCode。它将为您提供许多基本功能&#xff…

MySQL的基本语法

🥳🥳Welcome Huihuis Code World ! !🥳🥳 接下来看看由辉辉所写的关于MySQL的相关操作吧 目录 🥳🥳Welcome Huihuis Code World ! !🥳🥳 一.数据库(建立,查…

备战秋招002(20230704)

文章目录 前言一、今天学习了什么?二、关于问题的答案1.线程池2.synchronized关键字3、volatile 总结 前言 提示:这里为每天自己的学习内容心情总结; Learn By Doing,Now or Never,Writing is organized thinking. …

【网络原理】TCP/IP协议五层模型

🥊作者:一只爱打拳的程序猿,Java领域新星创作者,CSDN、阿里云社区优质创作者。 🤼专栏收录于:计算机网络原理 本期讲解协议、OSI七层模型、TCP/IP五层模型、网络设备所在的分层、数据的封装和分佣。 目录 …

浏览器绘制图表的 N 种方法 | 可视化

前言 DORAVIS 可视化大屏编辑器,是植根于浏览器的可视化平台。我们不难发现,DORAVIS 的众多图表中,有多种实现方案。如,基于 ECharts 二次开发的 BI 图表,有基于 Mapbox/leaflet 等实现的地理图表,以及根据…