当前位置: 首页 > news >正文

【Spark分布式内存计算框架——Spark SQL】4. DataFrame(上)

3.1 DataFrame是什么

在Spark中,DataFrame是一种以RDD为基础的分布式数据集,类似于传统数据库中的二维表格。DataFrame与RDD的主要区别在于,前者带有schema元信息,即DataFrame所表示的二维表数据集的每一列都带有名称和类型。
在这里插入图片描述
使得Spark SQL得以洞察更多的结构信息,从而对藏于DataFrame背后的数据源以及作用于DataFrame之上的变换进行针对性的优化,最终达到大幅提升运行时效率。反观RDD,由于无从得知所存数据元素的具体内部结构,Spark Core只能在stage层面进行简单、通用的流水线优化。
在这里插入图片描述
上图中左侧的RDD[Person]虽然以Person为类型参数,但Spark框架本身不了解Person类的内部结构。而右侧的DataFrame却提供了详细的结构信息,使得Spark SQL可以清楚地知道该数据集中包含哪些列,每列的名称和类型各是什么。了解了这些信息之后,Spark SQL的查询优化器就可以进行针对性的优化。后者由于在编译期有详尽的类型信息,编译期就可以编译出更加有针对性、更加优化的可执行代码。

官方定义:

  • Dataset:A DataSet is a distributed collection of data. (分布式的数据集)
  • DataFrame: A DataFrame is a DataSet organized into named columns.(以列(列名,列类型,列值)的形式构成的分布式的数据集,按照列赋予不同的名称)
    在这里插入图片描述
    DataFrame有如下特性:

1)、分布式的数据集,并且以列的方式组合的,相当于具有schema的RDD;
2)、相当于关系型数据库中的表,但是底层有优化;
3)、提供了一些抽象的操作,如select、filter、aggregation、plot;
4)、它是由于R语言或者Pandas语言处理小数据集的经验应用到处理分布式大数据集上;
5)、在1.3版本之前,叫SchemaRDD;

范例演示:加载json格式数据
第一步、上传官方测试数据$SPARK_HOME/examples/src/main/resources至HDFS目录/datas
在这里插入图片描述
查看HDFS上数据文件,其中雇员信息数据【employees.json】
在这里插入图片描述
第二步、启动spark-shell命令行,采用本地模式localmode运行
在这里插入图片描述
第三步、读取雇员信息数据
在这里插入图片描述

3.2 Schema 信息

查看DataFrame中Schema是什么,执行如下命令:
在这里插入图片描述
可以看出Schema信息封装在StructType中,包含很多StructField对象,查看源码。

  • 其一、StructType 定义,是一个样例类,属性为StructField的数组
    在这里插入图片描述

  • 其二、StructField 定义,同样是一个样例类,有四个属性,其中字段名称和类型为必填
    在这里插入图片描述

自定义Schema结构,官方提供实例代码:
在这里插入图片描述

相关文章:

【Spark分布式内存计算框架——Spark SQL】4. DataFrame(上)

3.1 DataFrame是什么 在Spark中,DataFrame是一种以RDD为基础的分布式数据集,类似于传统数据库中的二维表格。DataFrame与RDD的主要区别在于,前者带有schema元信息,即DataFrame所表示的二维表数据集的每一列都带有名称和类型。 使…...

GPS通信

目录 一、GPS启动的方式 二、GPS经纬度坐标转换 三、GPS定位和网络定位 四、3D定位和2D 定位 五、同步GPS时间到本地时间 六、卫星分布对GPS performance有很大影响吗 一、GPS启动的方式 热启动:指在上次关机的地方没有过多移动过,且距离上次定位…...

Java高频面试题,ReentrantLock 是如何实现锁公平和非公平性的?

我先解释一下个公平和非公平的概念。 公平,指的是竞争锁资源的线程,严格按照请求顺序来分配锁。 非公平,表示竞争锁资源的线程,允许插队来抢占锁资源。 ReentrantLock 默认采用了非公平锁的策略来实现锁的竞争逻辑。 其次&…...

「JVM 原理使用」 实际开发中的应用

Class 文件格式、执行引擎主要以 Class 文件描述了存储格式、类何时加载、如何连接、VM 如何执行字节码指令,这些动作基本都是 JVM 直接控制,用户代码无法干预和改变; 用户可以干预的只有字节码生成、类加载器两部分,而这两部分的…...

最最普通程序员,如何利用工资攒够彩礼,成为人生赢家

今天我们不讲如何提升你的专业技能去涨工资,不讲面试技巧如何跳槽涨工资,不讲如何干兼职赚人生第一桶金,就讲一个最最普通的程序员,如何在工作几年后,可以攒够彩礼钱,婚礼酒席钱,在自己人生大事…...

脏话越多,代码越好!

你在读开源代码的时候有没有遇到过这种注释?What the fuck ?Dude,WTFFuck this !我遇到过,每次都忍不住笑,心想老外可真是性情中人,遇到不爽的地方就开骂,还直接写到注释中,甚至代码中。Bob大叔…...

【Node.js】模块化

模块化模块化的基本概念模块化规范Node.js中模块化分类模块作用域向外共享模块作用域的成员Node.js中的模块化规范模块化的基本概念 指解决一个复杂问题时,自顶向下逐层把系统划分成若干模块的过程对于整个系统来说,模块是可组合,分解和更换…...

训练一个中文gpt2模型

前言 这是我的github上的一个介绍,关于如何训练中文版本的gpt2的。链接为: https://github.com/yuanzhoulvpi2017/zero_nlp 介绍 本文,将介绍如何使用中文语料,训练一个gpt2可以使用你自己的数据训练,用来:写新闻、…...

python文件头规范和函数注释自动生成(pycharm)

#!/usr/bin/env python # -*- coding: utf-8 -*- """ Time : ${DATE} ${TIME} Author : xxx Email : xxxxxx.comFileName: ${NAME}.py Software: ${PRODUCT_NAME} """if __name__ __main__:print(Python)pycharm python文件头规范和函数注…...

Fluent Python 笔记 第 17 章 使用 future 处理并发

future 指一种对象,表示异步执行的操作。这个概念的作用很大,是 concurrent.futures 模块和 asyncio 包(第 18 章讨论)的基础。 17.1 示例:网络下载的三种风格 17.1.1 依序下载的脚本 17.1.2 使用 concurrent.futures 模块下载 from concurrent impo…...

Android进阶之路 - StringUtils、NumberUtils 场景源码

忘记是在去年还是前年的时候遇到一个需要检测所传字符串是否为数字的场景,开始使用 NumberUtils.isNumber() 提示错误 ,没有解决问题(可能是因为依赖版本导致),最后使用的是StringUtils.isNumeric(),当时关…...

装备制造业数字化转型CRM系统解决方案(信息图)

一、制造企业面临的机遇与挑战 2021年12月28日,工业和信息化部等八部门联合对外发布《“十四五”智能制造发展规划》,明确提到“推进智能制造,要立足制造本质,紧扣智能特征,以工艺、装备为核心,以数据为基…...

CGAL 二维剖分

目录一、 2D Triangulations1、定义2 Representation2.1 The Set of Faces2.2 A Representation Based on Faces and Vertices3 Software Design4 Basic Triangulations4.1 Description遍历三角网顶点4.2 Implementation4.3 Geometric Traits4.4 Example of a Basic Triangulat…...

node.js+vue婚纱影楼摄影婚庆管理系统vscode项目

:减少管理婚庆工作人员的负担;管理人员可以随时浏览婚纱网站以便及时知道哪里需要修改和更进,同时还可以查看用户反馈给我们的信息,让管理员更加直观的了解客户的需求;该系统改变了以前手工记录的方式,使用…...

C语言 指针的新理解

16年写了很多 C 与 C 相关的文章,但是后面从事了 Android 开发,就全部删掉了,无意中发现了这篇由还存在草稿箱,索性就找回来吧,也是追忆当年学习的青葱岁月 1.指针就是一个存储了其他变量地址的变量。 指针存储的是整…...

【向每个应用View中增加子控件 Objective-C语言】

一、把刚才计算九宫格的思路再给大家过一遍 1.现在我们要计算九宫格坐标 1)先把每一个格子,每一个九宫格的大小,先确定了, 在这里先指定宽和高 CGFloat appW = 75; CGFloat appH = 90; 2)再去计算第一个格子的一些间距, 到上面的间距,marginTop = 30; 再计算出…...

【FPGA】Verilog:组合电路设计 | 三输入 | 多数表决器

前言:本章内容主要是演示Vivado下利用Verilog语言进行电路设计、仿真、综合和下载的示例:表决器(三人表决器)。 功能特性: 采用 Xilinx Artix-7 XC7A35T芯片 配置方式:USB-JTAG/SPI Flash 高达100MHz 的内部…...

【安全等保】安全等保二级和三级哪个高?哪个费用更高?

等保政策已经严格落地执行了,各大企业纷纷接到了过等保的通知,但有的估计是第一次听到等保,对于等保相关政策都是非常蒙圈的。这不不少企业相关负责人在问,安全等保二级和三级哪个高?哪个费用更高?这里我们…...

C++ STL学习记录(v1)

C STL学习记录一. 什么是STL1.1 STL的诞生1.2 STL基本概念1.3 STL的六大组件1.4 STL中的容器、算法、迭代器1.5 容器、算法、迭代器实践一. 什么是STL 1.1 STL的诞生 STL建立的目的就是为了解决软件界复用性的需求。C的面向对象和泛型编程思想,目的就是为了复用性的…...

开发中遇到的问题

1.当写一个导出功能时,因为编码写URL地址&参数的时候,用反转字符串的时候换行了,造成地址拼接不成,一直报错,后来发现是编码格式造成的,已解决。 解决方案:不换行或者用 “”拼接 2.当本地…...

Mermaid CLI深度解析:文本驱动图表生成在DevOps与文档自动化中的实践指南

Mermaid CLI深度解析:文本驱动图表生成在DevOps与文档自动化中的实践指南 【免费下载链接】mermaid-cli Command line tool for the Mermaid library 项目地址: https://gitcode.com/gh_mirrors/me/mermaid-cli Mermaid CLI作为Mermaid图表库的命令行接口&am…...

避开这3个坑,你的MAX30102心率数据才准确(Arduino实测经验)

避开这3个坑,你的MAX30102心率数据才准确(Arduino实测经验) 在可穿戴设备和健康监测领域,MAX30102传感器因其集成度高、体积小巧而广受欢迎。但许多开发者在使用过程中常遇到数据不稳定、读数漂移等问题。本文将基于实际项目经验&…...

Linux 2.6内核源码深度解读:kernel/time.c文件分析

一、引言:内核的时间维度与心跳引擎kernel/time.c是Linux内核中掌控时间流动与计时基准的核心文件,它负责将底层硬件时钟的离散脉冲转化为系统可用的连续时间概念,并为内核所有需要计时的功能提供基础设施。在操作系统语境中,&quo…...

Resemble Enhance:AI语音增强的终极指南,让嘈杂录音秒变专业音频

Resemble Enhance:AI语音增强的终极指南,让嘈杂录音秒变专业音频 【免费下载链接】resemble-enhance AI powered speech denoising and enhancement 项目地址: https://gitcode.com/gh_mirrors/re/resemble-enhance 你是否曾因录音环境嘈杂而烦恼…...

基于Next.js全栈技术构建本地即时交易平台:架构设计与核心实现

1. 项目概述:一个面向本地市场的即时交易平台最近在逛GitHub的时候,发现了一个挺有意思的项目,叫marketmenow。光看这个名字,你大概就能猜到它的方向——一个“现在就能交易的市场”。没错,这是一个旨在构建本地化、即…...

保姆级教程:在HCL模拟器上给H3C路由器配置DHCP服务器(双网段实战)

从零构建H3C路由器双网段DHCP服务:模拟器实战与协议解析 在虚拟实验室中搭建网络环境已成为现代工程师的必备技能,而DHCP服务作为网络自动化的基石,其配置过程往往成为初学者接触企业级设备的第一个实战挑战。本文将使用H3C官方推出的HCL模拟…...

现代前端项目模板:从工程化配置到最佳实践全解析

1. 项目概述:一个现代前端开发的起点在接手一个新项目,特别是前端项目时,最耗时的往往不是核心业务逻辑的开发,而是那些重复性的基础搭建工作:配置构建工具、集成代码规范、设置路由和状态管理、搭建基础布局组件……每…...

古吉拉特语TTS项目上线倒计时48小时!这份含11个合规性检查项的ElevenLabs交付清单请立刻保存

更多请点击: https://intelliparadigm.com 第一章:古吉拉特语TTS项目上线倒计时全景概览 古吉拉特语(Gujarati)作为印度西部广泛使用的官方语言,拥有超过 5500 万母语使用者,但其高质量、低延迟、可商用的…...

PyTorch实战:如何正确保存训练检查点(checkpoint)以实现断点续训和模型部署

PyTorch实战:工程化视角下的训练检查点管理与模型部署全流程 在深度学习项目的实际开发中,模型训练往往需要数小时甚至数天时间。突然的断电、服务器故障或人为中断都可能导致训练进度丢失。更糟糕的是,当需要将训练好的模型部署到生产环境时…...

油猴脚本集成ChatGPT:从原理到实战的浏览器AI自动化指南

1. 项目概述:一个为油猴脚本注入ChatGPT能力的起点如果你是一名前端开发者,或者对浏览器自动化、网页增强有浓厚的兴趣,那么你一定听说过或者用过“油猴脚本”。它就像给你的浏览器装上了一套瑞士军刀,可以自定义网页的样式、功能…...