pyspark基础 -- DataFrame的理解与案例

news/2024/4/27 16:04:28

DataFrame(df)介绍

datafram就是一个内存中的二维表结构,具备表结构的三个基本属性:

  • 表结构描述
  1. 在结构层面,pyspark中的StructType对象描述了表结构,StructField对象描述了表的一个列信息;
  2. 在数据层面,Row对象记录了一行数据,Column对象记录了一列数据并包含列信息;

在这里插入图片描述

DataFrame对象的构建方式

方式一 基于RDD构建

dataframe是可以从RDD中直接转化而来的,通过sparksession对象的createDataFrame方法可以将RDD转化为DataFrame,下例:
假设我们有一个people.txt,内容如下:

zhangsan,28
lisi,29
wangwu,30
# coding:utf8
from pyspark.sql import SparkSession
if __name__ == '__main__':# 构建sparkspark = SparkSession.builder.\appName("Create df").\master("local[*]").\getOrCreate()# 获取contextsc = spark.sparkContext# 构建一个RDD rdd[(name, age), ()]rdd = sc.textFile("people.txt").\map(lambda x : x.split(',')).\map(lambda x : [x[0], int(x[1])]) # RDD会做类型自动探测,这里需要做类型转换# 构建df,RDD按照提供的字段顺序一次获取信息df = spark.createDataFrame(rdd, schema = ["name", "age"])# 打印df结构df.printSchema()# 打印20行数据# show有两个参数,参数1指定展示多少条数据,默认20# 参数2表示是否对列进行截断,如果列的长度超过20个字符传长度,后续的内容以...代替,不全打印df.show()# df.show(15, False)# 构建临时视图表,让我们可以用sparksql的方式查询表内容df.createTempView("peopleTable")spark.sql("select * from peopleTable where age < 29").show()
方式二 通过StructType对象构建

structtype类可以定义整个DataFrame中的schema,也即 df = spark.createDataFrame(rdd, schema = [“name”, “age”])这里的schema可以通过structType来指定

# 需导入以下类
from pyspark.sql import SturctType StringType IntegerType
# 定义表结构,第一个为列名称,第二个参数列数据类型,第三个是否允许为空
schema = StructTpe.\add("id", IntegerType(), nullable=False).\add("name", StringType(), nullable=False).\add("score", IntegerType(), nullable=False)
# 将rdd转为scheme结构
df = spark.createDataFrame(rdd, schema)
通过rdd.toDF()的方法

rdd对象本身有toDF()方法,可以通过参数指定表结构来将rdd转为DataFrame,参数也细分为两种,一种是直接指定表头,如下:

df1 = rdd.toDF(["name", "age"])

这种方法只能指定列名,无法指定列数据类型,只能靠编译器自动推断类型,在类型不敏感时可用,另外一种则是利用上面提到的StructType类先定义号表结构,传入指定表结构变量

df2 = rdd.toDF(schema=schema)
基于pandas的DataFrame转化为sparksql的DataFrame

createDataFrame直接接收pandas的df即可转换

from pyspark.sql import SparkSession
import pandas as pdif __name__ == '__main__':spark = SparkSession.builder.\appName("test").\master("local[*]").\getOrCreate()sc = spark.sparkContext# 定义pandas的DataFramepdf = pd.DataFrame({"id" : [1, 2, 5],"name" : ["zhang", "wang", "li"],"age" : [11, 23, 55]})# 转换为spark的DFdf = spark.createDataFrame(pdf)

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

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

相关文章

在github下载的神经网络项目,如何运行?

github网页上可获取的信息 在github上面&#xff0c;有一个requirements.txt文件&#xff0c;该文件说明了项目要求的python解释器的模块。 - 此外&#xff0c;还有一个README.md文件&#xff0c;用来说明项目的运行环境以及其他的信息。例如python解释器的版本是3.7、PyTorc…

晶圆制造过程中常用载具的类型

晶圆载具用于硅片生产、晶圆制造以及工厂之间晶圆的储存、传送、运输以及防护。晶圆载具种类很多,如FOUP用于晶圆制造工厂中晶圆的传送;FOSB用于硅片生产与晶圆制造工厂之间的运输;CASSETTE载具可用于工序间运送以及配合工艺使用。 OPEN CASSETTE OPEN CASSETTE主要在晶圆…

简介:使用TensorFlow实现python简版神经网络模型

如果你想进一步深入AI编程的魔法世界&#xff0c;那么TensorFlow和PyTorch这两个深度学习框架将是你的不二之选。它们可以帮助你构建更加复杂的神经网络模型&#xff0c;实现图像识别、语音识别等高级功能。 模型原理&#xff1a;神经网络是一种模拟人脑神经元结构的计算模型&a…

机器学习_推荐系统

文章目录 定义问题基于内容的推荐系统协同过滤 定义问题 我们从一个例子开始定义推荐系统的问题。 下面引入一些标记&#xff1a; 基于内容的推荐系统 在一个基于内容的推荐系统算法中&#xff0c;我们假设对于我们希望推荐的东西有一些数据&#xff0c;这些数据是有关这些…

QGIS编译(跨平台编译)056:PDAL编译(Windows、Linux、MacOS环境下编译)

点击查看专栏目录 文章目录 1、PDAL介绍2、PDAL下载3、Windows下编译4、linux下编译5、MacOS下编译1、PDAL介绍 PDAL(Point Data Abstraction Library)是一个开源的地理空间数据处理库,它专注于点云数据的获取、处理和分析。PDAL 提供了丰富的工具和库,用于处理激光扫描仪、…

蓝桥杯练习系统(算法训练)ALGO-970 数组移动

资源限制 内存限制&#xff1a;256.0MB C/C时间限制&#xff1a;1.0s Java时间限制&#xff1a;3.0s Python时间限制&#xff1a;5.0s 问题描述 初始数组A[N]中为1,2,..,N&#xff0c;N个数字&#xff0c;现要进行M次操作&#xff0c;每次操作给定一个数字i&#xff0c…