14-pyspark的DataFrame使用总结

news2025/2/24 13:59:55

目录

    • 前言
    • DataFrame使用总结
      • DataFrame的构建
        • 方法1:通过列表构建
        • 方法2:通过Row对象构建
        • 方法3:通过表Schema构建
        • 方法4:rdd结合字符串构建
      • DataFrame的方法


PySpark实战笔记系列第五篇

  • 10-用PySpark建立第一个Spark RDD(PySpark实战笔记系列第一篇)
  • 11-pyspark的RDD的变换与动作算子总结(PySpark实战笔记系列第二篇))
  • 12-pyspark的RDD算子注意事项总结(PySpark实战笔记系列第三篇)
  • 13-pyspark的共享变量用法总结(PySpark实战笔记系列第四篇)
  • 14-pyspark的DataFrame使用总结(PySpark实战笔记系列第五篇)

前言

在Spark中,除了RDD这种数据容器外,另一种一种更容易操作的一个分布式数据容器DataFrame,它更像传统关系型数据库的二维表,除了包括数据自身以外,还包括数据的结构信息(Schema),可以利用类似SQL的语言来进行数据访问

DataFrame可以从多种数据来源上进行构建,比如结构化数据文件、Hive中的表、外部数据库或现有RDD

DataFrame使用总结

DataFrame的构建

方法1:通过列表构建

列表的元素是元组,这个数据结构可以代表一种二维数据。然后利用spark.createDataFrame()方法来构建,示例如下:

import findspark
findspark.init()
#############################################
from pyspark.sql
import SparkSession
spark = SparkSession.builder \
		            .master("local[2]") \
		            .appName("DataFrameDemo") \
				    .getOrCreate();
############################################
a = [('Jack', 32),('Smith', 33)]
df = spark.createDataFrame(a)
#[Row(_1='Jack', _2=32), Row(_1='Smith', _2=33)]
print(df.collect())
df.show()15  
# +-----+---+  
# |   _1| _2|
# +-----+---+
# | Jack| 32|
# |Smith| 33|
# +-----+---+

# 指定列名
df2 = spark.createDataFrame(a, ['name', 'age'])
#[Row(name='Jack', age=32), Row(name='Smith', age=33)]
print(df2.collect())
df2.show()
# +-----+---+
# | name|age|
# +-----+---+
# | Jack| 32|
# |Smith| 33|3
# +-----+---+
方法2:通过Row对象构建

到DataFrame对象是由Row这个数据结构构成的,因此也可以**用Row,然后利用spark.createDataFrame() 方法 **来创建DataFrame对象。示例如下:

# 通用的开头
# ......
#################################################
from pyspark.sql import Row 

a = [('Jk', 32),('Sm', 33)]
rdd = sc.parallelize(a) 
# 创建包含列名的Row
RMes= Row('name', 'age') 
# rdd对象的元素进行映射,转换成一个RMes对象,并返回一个新RDD对象
rmes = rdd.map(lambda r: RMes(*r))
df = spark.createDataFrame(rmes)
# [Row(name='Jk', age=32), Row(name='Sm', age=33)]
print(df.collect())
df.show()
# +-----+---+
# | name|age|
# +-----+---+
# | Jk  | 32|
# |Sm   | 33|
# +-----+---+
方法3:通过表Schema构建

上述两个方法都没能给定每个字段的类型,比如列名name是字符串类型,而列名age是数值类型。而通过用StructType方法创建了一个表Schema则可以实现,类似定义数据库中的表结构。再利用spark.createDataFrame()方法来创建DataFrame对象。示例如下:

# 通用的开头
# ......
#################################################
from pyspark.sql.types import *

a = [('Jk', 32),('Sm', 33)]
rdd = sc.parallelize(a)
# 用StructType方法创建了一个表Schema
schema = StructType([
			StructField("name", StringType(), True),
			StructField("age", IntegerType(), True)]
			)
# 创建DataFrame
df = spark.createDataFrame(rdd, schema)
# Row(name='Jk', age=32), Row(name='Sm', age=33)]
print(df.collect())
df.show()
# +-----+---+
# | name|age|
# +-----+---+
# | Jk  | 32|
# |Sm   | 33|
# +-----+---+
df.printSchema()
# root
#  |-- name: string (nullable = true)
#  |-- age: integer (nullable = true)
方法4:rdd结合字符串构建

借助StructType方法可以创建类型化的DataFrame对象,但是操作起来有点繁琐。下面示例一个简单一点的方法,同样可以创建具备字段类型的DataFrame对象。

# 通用的开头
# ......
#################################################
a = [('Jk', 32),('Sm', 33)]
rdd = sc.parallelize(a)
# 创建DataFrame:使用一个字符串对表结构中的字段类型进行定义
df = spark.createDataFrame(rdd, "name:string, age:int")
# Row(name='Jk', age=32), Row(name='Sm', age=33)]
print(df.collect())
df.show()
# +-----+---+
# | name|age|
# +-----+---+
# | Jk  | 32|
# |Sm   | 33|
# +-----+---+
df.printSchema()
# root
#  |-- name: string (nullable = true)
#  |-- age: integer (nullable = true)

DataFrame的方法

方法名使用形式参数说明作用示例
showdf.show()用表格的方式对数据进行打印在这里插入图片描述
printSchemadf.printSchema()打印df对象的Schema结构定义在这里插入图片描述
createOrReplaceTempViewdf.createOrReplaceTempView(viewName)viewName:string,指定创建的表名将DataFrame映射为一个数据库表在这里插入图片描述
selectdf.select(colNames)colNames:string,需要读取的列名称读取指定列的信息在这里插入图片描述
selectExprdf.selectExpr(*colMes)对列进行计算在这里插入图片描述
aggdf.agg(dictMes)dictMes:dict,其中key为列名,value为聚合的函数名对DataFrame的指定列按照指定的方式进行聚合在这里插入图片描述
describedf.describe(listMes)listMes:默认None,描述统计的列名称对指定字段进行描述统计在这里插入图片描述
summarydf.summary()给出DataFrame对象的概览统计结果在这里插入图片描述
filterdf.filter(filterCondtion)filterCondtion:指定的过滤条件逻辑关系式对数据进行过滤在这里插入图片描述
joindf.join(otherDF,join_key,how=“inner”)第三个参数默认为inner,其他选项为:inner,cross,outer,full,full_outer,left,left_outer,right,right_outer,left_semi,left_anti多个DataFrame进行关联在这里插入图片描述
distinctdf.distinct()对DataFrame对象中的数据进行去重操作在这里插入图片描述
dropdf.drop(*col_names)col_names:需要删除的列名称删除某些不需要的数据列信息(从列上移除在这里插入图片描述
exceptAlldf.exceptAll(otherDF)从一个DataFrame的数据中移除掉另外一个DataFrame中的数据(从行上移除在这里插入图片描述
intersectAlldf.intersectAll(otherDF)求两个DataFrame的交集df1.intersectAll(df2).sort(“C1”,“C2”).show()
na.filldf.na.fill(dictMes)dictMes:dict,指定列空值的替换方式对空值进行替换操作在这里插入图片描述
toJSONdf.toJSON()将DataFrame转成JSON格式在这里插入图片描述
withColumndf.withColumn(colName,df)增加计算列在这里插入图片描述
withColumnRenameddf.withColumnRenamed(old,new)修改列名同上
write.csvdf.write.csv(csvfilepath,mode)df.write.csv函数给定的参数是数据存储的路径,而不是文件名。将DataFrame数据以csv格式进行存储在这里插入图片描述

参考文档:

  • https://spark.apache.org/docs/latest/api/python/reference/pyspark.html
  • 《Python大数据处理库PySpark实战》

博主写博文就是方便对自己所学所做的事做一备份记录或回顾总结。欢迎留言,沟通学习。

刚开始接触,请多指教,欢迎留言交流!

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

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

相关文章

DSP笔记-7时钟和系统控制

外部时钟源-晶振 无源晶振,有源晶振, 频率:20MHz,12.5MHz,30MHz,50MHz,32.768MHz SPI,SCI, I2C串行通信 eCAP捕获功能,eQEP解码,ePWM脉冲宽度…

SAP SD学习笔记03 - SD模块中的主数据

上一章讲了SD中的组织单位和SD的简单流程。 SAP SD学习笔记02 - 销售流程中的组织单位-CSDN博客 SAP SD学习笔记01 - 简单走一遍SD的流程:受注,出荷,请求-CSDN博客 这一章讲SD中的主数据: - 得意先Master(客户&…

Java设计模式之创建型模式(二)原型模式

原型模式 1、原型模式1-1、应用场景1-2、举个 软栗子1-3、举个 硬栗子1-4、举个实务栗子1-5、代码重构 学习原型模式的目的:原型模式的目的在于通过复制现有的实例来创建新的对象,以避免通过构造函数创建对象时可能带来的性能开销,同时可以控…

实验9 内置对象application

一、实验目的 掌握怎样在JSP中使用内置对象application 二、实验项目内容&#xff08;实验题目&#xff09; 编写代码&#xff0c;掌握application的用法。【参考课本例题4-16 留言板 】 三、源代码以及执行结果截图&#xff1a; example4_16.jsp <% page language"…

python——条件语句

概念 条件语句&#xff0c;简单的理解就是 满足条件执行这些代码&#xff0c;不满足则执行另一些代码 语法 #mermaid-svg-ITs2kv8f87vZuQhT {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-ITs2kv8f87vZuQhT .erro…

【网站项目】鲜花销售微信小程序

&#x1f64a;作者简介&#xff1a;拥有多年开发工作经验&#xff0c;分享技术代码帮助学生学习&#xff0c;独立完成自己的项目或者毕业设计。 代码可以私聊博主获取。&#x1f339;赠送计算机毕业设计600个选题excel文件&#xff0c;帮助大学选题。赠送开题报告模板&#xff…

excle如何设置自动显示星期几

目录 一.目的 二.范例结果 三.处理方式 一.目的 excle依据日期&#xff0c;设置后自动显示星期几。 二.范例结果 三.处理方式 公式1TEXT(XXX,DDDD) 公式2TEXT(XXX,DDD)

YoloV8改进策略:Block改进|轻量级的Mamba打造优秀的YoloV8|即插即用,简单易懂|附Block结构图(独家原创)更新中。。。。。

摘要 无Mamba不狂欢&#xff0c;今天给大家带来一个基于轻量级Mamba的改进。模块简单易懂&#xff0c;即插即用&#xff01; 带领大家去征服更高的领域。 论文&#xff1a;《LightM-UNet&#xff1a;Mamba 辅助的轻量级 UNet 用于医学图像分割》 https://arxiv.org/pdf/2403…

欢迎加入PenPad Season 2 ,获得勋章以及海量 Scroll 生态权益

PenPad 是 Scroll 生态中的首个 LaunchPad 平台&#xff0c;该平台继承了 Scroll 生态的技术优势&#xff0c;具备包括隐私在内的系列特点&#xff0c;同时且也被认为是 Scroll 生态最重要的价值入口之一。Penpad 与 Scroll 官方始终保持着合作&#xff0c;同时该项目自启动以来…

解决VM报错:不支持虚拟化的 amd-v/rvi

安装了VMware之后&#xff0c;想测试一下虚拟机嵌套。在勾选虚拟机CPU的虚拟化AMD-V/RVI之后&#xff0c;竟然无法启动&#xff0c;提示“此平台不支持虚拟化的 amd-v/rvi”。 上网找了一下资料&#xff0c;发现是因为Hyper-V与VMware冲突以及Windows Defender的内核隔离导致的…

【基础知识】计算机国企爱考的二进制知识、大学生必须掌握

二进制与十进制相互转换的详细过程及例题解析 二进制和十进制是两种常用的数制系统。二进制系统仅使用0和1两个数字&#xff0c;而十进制系统则使用0到9的十个数字。在计算机科学和数字电路设计等领域&#xff0c;经常需要在这两种数制之间进行转换。本文将详细介绍二进制与十…

(二)ffmpeg 下载安装以及拉流推流示例

一、ffmpeg下载安装 官网&#xff1a;https://www.ffmpeg.org/ 源码下载地址&#xff1a;https://www.ffmpeg.org/download.html#releases 下载源码压缩包 下载完成之后解压并在该目录下打开命令窗口 安装依赖环境&#xff1a; sudo apt-get install build-essential nasm …

组合数学<1>——组合数学基础

今天我们聊聊组合数学。(本期是给刚刚学习组合数学的同学看的&#xff0c;dalao们可以自行忽略) 建议:不会求逆元的出门左转数论<2>&#xff0c;不会数论的出门右转数论<1>。 加乘原理 加乘原理小学奥数就有。 总的来说:加法原理:分类;乘法原理:分步 比如说&a…

OJ 【难度1】【Python】完美字符串 扫雷 A-B数对 赛前准备 【C】精密计时

完美字符串 题目描述 你可能见过下面这一句英文&#xff1a; "The quick brown fox jumps over the lazy dog." 短短的一句话就包含了所有 2626 个英文字母&#xff01;因此这句话广泛地用于字体效果的展示。更短的还有&#xff1a; "The five boxing wizards…

【我的小工具】生成React页面类

有了数据表的结构信息&#xff0c;就能生成React 的页面类&#xff0c;快捷方便。 生成界面如下&#xff1a; 生成的React FrmUser.js页面如下&#xff1a; 只需再写里面的操作逻辑代码。

存储革新:下一代低功耗PCM相变存储器

引言 由于Optane&#xff08;实质为PCM相变存储器&#xff09;被intel放弃以后&#xff0c;小编一直在关注业内有关SCM存储级内存&#xff08;PCM、ReRAM等&#xff09;相关的研究进展。比如之前发布的内容&#xff0c;供存储随笔的读者参考&#xff01; 字节跳动入局存储内存…

如何应用电桥电路的原理?

电桥电路是一种常用的测量技术&#xff0c;它利用了四个电阻的网络来检测电路的平衡状态。在平衡状态下&#xff0c;电桥的输出电压为零&#xff0c;这种特性使得电桥电路非常适合于精确测量电阻、电感、电容等电气参数&#xff0c;以及用于传感器和测量设备中。以下是电桥电路…

第十二届蓝桥杯真题做题笔记

2、卡片 笔记&#xff1a; 直接巧用排列组合求解即可&#xff1a; 我们通过对样例说明进行分析可知&#xff1a;想要分给n个小孩&#xff0c;那么我们就需要满足C(K, 2) K > n才能满足。 #include<bits/stdc.h> using namespace std;int com(int up, int down){i…

从文字到思维:呆马GPT在人工智能领域的创新之旅

引言 生成式预训练变换器&#xff08;Generative Pre-trained Transformer&#xff0c;简称GPT&#xff09;领域是人工智能技术中的一大革新。自OpenAI推出第一代GPT以来&#xff0c;该技术经历了多代发展&#xff0c;不断提升模型的规模、复杂度和智能化程度。GPT模型通过在大…

AI大模型日报#0411:国内首款音乐大模型、面壁智能数亿融资、MyScale AI开源

导读&#xff1a; 欢迎阅读《AI大模型日报》&#xff0c;内容基于Python爬虫和LLM自动生成。目前采用“文心一言”生成了每条资讯的摘要。 ​标题: 大模型做时序预测也很强&#xff01;华人团队激活LLM新能力&#xff0c;超越一众传统模型实现SOTA 摘要: 大语言模型通过新提…