【pyspark学习从入门到精通7】DataFrames_2

news2024/11/24 11:52:28

目录

创建 DataFrames

生成我们自己的 JSON 数据

创建 DataFrame

创建临时表

简单的 DataFrame 查询

DataFrame API 查询

SQL 查询


创建 DataFrames

通常,您会通过使用 SparkSession(或在 PySpark shell 中调用 spark)导入数据来创建 DataFrame。

我们将讨论如何将数据导入到本地文件系统、Hadoop 分布式文件系统(HDFS)或其他云存储系统(例如,S3 或 WASB)。在本文中,我们将专注于在 Spark 内直接生成您自己的 DataFrame 数据或利用 Databricks 社区版中已经可用的数据源。

首先,我们将不访问文件系统,而是通过生成数据来创建 DataFrame。在这种情况下,我们将首先创建 stringJSONRDD RDD,然后将其转换为 DataFrame。这段代码片段创建了一个包含游泳者(他们的 ID、姓名、年龄和眼睛颜色)的 JSON 格式的 RDD。

生成我们自己的 JSON 数据

下面,我们将最初生成 stringJSONRDD RDD:

stringJSONRDD = sc.parallelize(("""
 { "id": "123",
"name": "Katie",
"age": 19,
"eyeColor": "brown"
 }""",
"""{
"id": "234",
"name": "Michael",
"age": 22,
"eyeColor": "green"
 }""", 
"""{
"id": "345",
"name": "Simone",
"age": 23,
"eyeColor": "blue"
 }""")
)

现在我们已经创建了 RDD,我们将使用 SparkSession 的 read.json 方法(即 spark.read.json(...))将其转换为 DataFrame。我们还将使用 .createOrReplaceTempView 方法创建一个临时表。

创建 DataFrame

以下是创建 DataFrame 的代码:

swimmersJSON = spark.read.json(stringJSONRDD)

创建临时表

以下是创建临时表的代码:

swimmersJSON.createOrReplaceTempView("swimmersJSON")

如前文所述,许多 RDD 操作是转换,这些转换直到执行动作操作时才执行。例如,在前面的代码片段中,sc.parallelize 是一个转换,当使用 spark.read.json 从 RDD 转换为 DataFrame 时执行。注意,在这段代码的笔记本截图中(左下角附近),直到包含 spark.read.json 操作的第二个单元格,Spark 作业才执行。

为了进一步强调这一点,在下图的右侧窗格中,我们展示了执行的 DAG 图。

在下面的截图中,您可以看到 Spark 作业的 parallelize 操作来自生成 RDD stringJSONRDD 的第一个单元格,而 map 和 mapPartitions 操作是创建 DataFrame 所需的操作:

需要注意的是,parallelize、map 和 mapPartitions 都是 RDD 转换。在 DataFrame 操作 spark.read.json(在本例中)中,不仅有 RDD 转换,还有将 RDD 转换为 DataFrame 的动作。这是一个重要的说明,因为即使您正在执行 DataFrame 操作,要调试您的操作,您需要记住您将在 Spark UI 中理解 RDD 操作。

请注意,创建临时表是一个 DataFrame 转换,并且在执行 DataFrame 动作之前不会执行(例如,要执行的 SQL 查询)。

简单的 DataFrame 查询

现在您已经创建了 swimmersJSON DataFrame,我们将能够在其上运行 DataFrame API 以及 SQL 查询。让我们从一个简单的查询开始,显示 DataFrame 中的所有行。

DataFrame API 查询

要使用 DataFrame API 执行此操作,您可以使用 show(<n>) 方法,该方法将前 n 行打印到控制台:

# DataFrame API
swimmersJSON.show()

这将给出以下输出:

SQL 查询

如果您更倾向于编写 SQL 语句,您可以编写以下查询:

spark.sql("select * from swimmersJSON").collect()

这将给出以下输出:

我们使用了 .collect() 方法,它返回所有记录作为一个行对象(Row objects)的列表。请注意,您可以对 DataFrames 和 SQL 查询使用 collect() 或 show() 方法。只要确保,如果您使用 .collect(),这是针对小 DataFrame 的,因为它将返回 DataFrame 中的所有行,并将它们从执行器移回驱动程序。您可以改用 take(<n>) 或 show(<n>),这允许您通过指定 <n> 来限制返回的行数:

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

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

相关文章

SpinalHDL之错误集(一)

本文作为SpinalHDL学习笔记第七十六篇&#xff0c;作为错误集使用&#xff0c;类似高中生的错题集&#xff0c;记录使用SpinalHDL过程中遇到的问题&#xff0c;小到语法错误、版本兼容问题&#xff0c;大到SpinalHDL库函数错误等等&#xff0c;持续更新。 SpinalHDL学习笔记总…

记录 ruoyi-vue-plus在linux 部署遇到的问题

整理 linux 文件不要放在 /, 根目录下&#xff0c;要放在 home 文件夹下。docker 启动mysql 容器&#xff0c;映射的 my.cnf 文件不能设置太高权限&#xff0c;权限太高有安全问题&#xff0c;无法读取。 linux 使用注意事项 docker 文件夹 部署在home文件夹下 总结学习到的…

Asp.Net Core 发布 IIS、docker、Azure、文件夹、AAS、ASF、AWM等

发布 微软资料 微软资料 在 IIS 工作进程 (w3wp.exe) 内托管 ASP.NET Core 应用&#xff0c;称为进程内托管模型。 将 Web 请求转发到运行 Kestrel 服务器的后端 ASP.NET Core 应用&#xff0c;称为进程外托管模型。 发布到IIS 》》》Asp.net 之前 》》》 Asp.net Core …

JavaScript 网页设计案例:使用 Canvas 实现趣味打气球小游戏

JavaScript 网页设计案例&#xff1a;使用 Canvas 实现趣味打气球小游戏 在网页设计中&#xff0c;交互性和趣味性是吸引用户的重要因素。借助 JavaScript 和 HTML5 的 canvas 元素&#xff0c;我们可以轻松实现各种动画效果&#xff0c;今天将带你打造一个有趣的 打气球小游戏…

Vxe vue vxe-table 分享实现打印表格以及同时打印两张表

Vxe vue vxe-table 分享实现打印表格以及同时打印两张表 vxe-table 默认情况下支持单表打印。 在有些情况下&#xff0c;页面上同时有几张表&#xff0c;这时需要一次性打印出来。可以利用 Vxe 自带的分页打印功能&#xff0c;实现多张表同时打印。 效果 点击打印后自动调起预…

Redis --- 第四讲 --- 常用数据结构 --- set、zset

一、set类型的基本介绍 谈到一个术语&#xff0c;这个术语很可能有多种含义。Set一个含义是集合&#xff0c;一个含义是设置。 集合就是把一些有关联数据放到一起。 1、集合中的元素是无序的&#xff01; 2、集合中的元素是不能重复的。 和list类似&#xff0c;集合中的每…

数据治理为何如此简单?

欢迎来文末免费获取数据治理相关PPT和文档 引言 随着大数据技术的迅速发展&#xff0c;企业积累的数据量呈现爆炸式增长。有效的数据管理已经成为企业提高决策效率、增强竞争优势的重要手段。在这样的背景下&#xff0c;数据治理逐渐成为企业数据管理中不可或缺的一环。它不仅…

15分钟学Go 第1天:Go语言简介与特点

Go语言简介与特点 1. Go语言概述 Go语言&#xff08;又称Golang&#xff09;是由谷歌于2007年开发并在2009年正式发布的一种开源编程语言。它旨在简单、高效地进行软件开发&#xff0c;尤其适合于网络编程和分布式系统。 1.1 发展背景 多核处理器&#xff1a;随着计算机硬件…

MFC扩展库BCGControlBar Pro v35.1新版亮点:改进网格控件性能

BCGControlBar库拥有500多个经过全面设计、测试和充分记录的MFC扩展类。 我们的组件可以轻松地集成到您的应用程序中&#xff0c;并为您节省数百个开发和调试时间。 BCGControlBar专业版 v35.1已全新发布了&#xff0c;这个版本改进网格控件的性能、增强工具栏编辑器功能等。 …

hadoop集群搭建-克隆虚拟机,安装jdk,hadoop

2.2 hadoop运行环境的搭建 2.2.1 环境准备 1&#xff09;安装模板虚拟机&#xff0c;IP地址 192.168.10.100&#xff0c;主机名hadoop100&#xff0c;内存41GB&#xff0c;硬盘50GB 2&#xff09;虚拟机配置 首先测试虚拟机是否可以正常上网&#xff0c;测试方法ping www.b…

HarmonyOS Next模拟器异常问题及解决方法

1、问题1&#xff1a;Failed to get the device apiVersion. 解决方法&#xff1a;关闭模拟器清除用户数据重启

centos7.9调整磁盘分区大小

在安装centos7.9时我们一般采用默认分区设置&#xff0c;使用LVM来管理磁盘空间&#xff0c;根分区只有50GB&#xff0c;其余的所有可用空间都分配在/home分区下。可是centos7中大多数的应用软件都是安装在根分区的&#xff0c;在使用过程中经常会出现明明系统还有很大的磁盘空…

CSS 选择器简单回顾

引言 当我们探讨网页设计和开发时, CSS(层叠样式表) 无疑是一个不可或缺的技术, 它使我们能够精确控制网页的外观和布局, 为用户创造出独特的视觉体验、以及良好的交互体验!! 而一个完整的 CSS 规则则是由两个主要部分组成: 选择器和声明块 那么今天我们就来盘点下常见的几种选…

jmeter使用csv数据

背景 使用jmeter对系统进行压测。测试数据存储在了csv中&#xff0c;多线程压测的时候&#xff0c;csv中的一条数据不能多个线程同时使用&#xff0c;数据全部使用过后&#xff0c;需要终止压测。 功能点 从csv读取数据后&#xff0c;完成接口数据拼接。多线程依次从csv文件…

蓝牙HCI的log分析方法

一 前言: Bluetooth HCI log 的最主要功能是用于分析蓝牙设备之间的交互行为是否符合预期,以及是否符合 蓝牙规范之规定。 基本上,在手机应用平台上,除了蓝牙功能无法打开以及蓝牙引起的 system crash 问题之外,蓝牙相 关的问题,均可以通过分析 HCI log 来定位问题。 具…

MacOS Sublime Text 解决中乱码

1. 安装Package Control 官方安装指南 手动安装 通过以此点击菜单 Sublime Text > Preferences > Browse Packages 打开Packages目录找到Packages的同级目录Installed Packages下载PackageControl.sublime-package并保存到Installed Packages中在菜单 Sublime Text &g…

[含文档+PPT+源码等]精品基于springboot实现的原生微信小程序小型电子拍卖系统

基于Spring Boot实现的原生微信小程序小型电子拍卖系统的背景&#xff0c;可以从以下几个方面进行详细阐述&#xff1a; 一、技术背景 Spring Boot框架&#xff1a; Spring Boot是一个开源的Java应用框架&#xff0c;它基于Spring框架&#xff0c;旨在简化Spring应用的开发、配…

SpringBoot基于微信小程序的上门幼儿照护服务系统(源码+lw+部署文档+讲解等)

项目运行截图 技术框架 后端采用SpringBoot框架 Spring Boot 是一个用于快速开发基于 Spring 框架的应用程序的开源框架。它采用约定大于配置的理念&#xff0c;提供了一套默认的配置&#xff0c;让开发者可以更专注于业务逻辑而不是配置文件。Spring Boot 通过自动化配置和约…

前端将表格页面导出为 PDF 并适配 A4纸张的思路

文章目录 最终效果技术依赖包优缺点实现思路代码 最终效果 这个是原页面 这个是前端处理成 pdf 的效果 技术依赖包 vue2 element html2canvas jsPDF html2Canvas 官网 jsPDF 官网 优缺点 优点&#xff1a;就是不需要后端处理 pdf 了&#xff0c;原本想着把 dom 和 cs…

Java:数据结构-队列(Queue)

一 队列 队列是一种先进先出的数据结构&#xff0c;队列中的元素按照进入的顺序排列&#xff0c;第一个插入的元素最先被移除。 1.队列的使用 &#xff1a; Queue是一个接口&#xff0c;底层是通过链表实现的。 我们可以通过双链表模拟实现一个Queue 1.入队列&#xff08;向双…