pyspark dataframe基本操作

本文详细介绍了如何使用PySpark创建DataFrame,包括从CSV文件、手动创建和从RDD转换。接着展示了DataFrame的各种操作,如读取数据、过滤、查询、列操作、分组排序、数据集合并和连接。此外,还涵盖了模糊查询、between操作等高级用法,是PySpark初学者的实用指南。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1 创建dataframe

1.1 读取文件创建

from pyspark.sql import SparkSession #sparkSession为同统一入口

#创建spakr对象
spark = SparkSession\
    .builder\
    .appName('readfile')\
    .getOrCreate()

# 1.读取csv文件
# 1.读取csv文件
logFilePath = 'births_train.csv'
log_df = spark.read.csv(logFilePath, 
                        encoding='utf-8', 
                        header=True, 
                        inferSchema=True,
                        sep=',')

logFilePath:这是我自定义的一个参数,为文件路径
encoding:文件编码格式,默认为utf-8
header:是否将文件第一行作为表头,True即将文件第一行作为表头
inferSchema:是否自动推断列类型
sep:列分割符

log_df.show()

展示结果如下图

1.2 手动创建

这种方式一般为测试的时候用,适用于数据量很小的时候

from pyspark.sql import SparkSession

spark = SparkSession.builder.appName("FirstApp").getOrCreate()

employees = [(1, "John", 25), (2, "Ray", 35), (3,"Mike", 24), (4, "Jane", 28), (5, "Kevin", 26), 
             (6, "Vincent", 35), (7,"James", 38), (8, "Shane", 32), (9, "Larry", 29), (10, "Kimberly", 29),
             (11, "Alex", 28), (12, "Garry", 25), (13, "Max",31)]
employees=spark.createDataFrame(employees, schema=["emp_id","name","age"])

这里创建了三列
employees为数据内容,schema为表头,这种方式比较简单,类型为spark推断类型

可能有的同学会见到如下表头的创建方式,类型可以自己指定

from pyspark.sql import SparkSession #sparkSession为同统一入口
from pyspark.sql.types import *

#创建spakr对象
spark = SparkSession\
    .builder\
    .appName('readfile')\
    .getOrCreate()

employees = [(1, "John", 25), (2, "Ray", 35), (3,"Mike", 24), (4, "Jane", 28), (5, "Kevin", 26), 
             (6, "Vincent", 35), (7,"James", 38), (8, "Shane", 32), (9, "Larry", 29), (10, "Kimberly", 29),
             (11, "Alex", 28), (12, "Garry", 25), (13, "Max",31)]
schema = StructType([StructField('emp_id',IntegerType(),True),
                    StructField('name',StringType(),True),
                    StructField('age',IntegerType(),True)])
df = spark.createDataFrame(employees,schema=schema)

StructType:即指定一个列类型的对象,里面包含列类型数组
Str

### PySpark DataFrame 架构解析 PySpark DataFrame 提供了一种分布式的数据处理方式,其架构设计旨在优化大规模数据集的操作效率。DataFrame 是一种类似于关系型数据库表的数据结构,具有命名列和模式(schema),可以存储不同类型的数据。 #### 主要组件 1. **Catalyst Optimizer** Catalyst 优化器负责编译逻辑查询计划并对其进行优化。该优化过程包括规则应用、成本模型评估以及物理执行计划的选择[^1]。 2. **RDD (Resilient Distributed Dataset) 层** 尽管用户通常不会直接操作 RDDs,但在底层实现上,所有的 DataFrame 操作最终都会转换成一系列针对 RDD 的算子调用。这种抽象允许更高效的内存管理和容错机制。 3. **Execution Engine** 执行引擎接收来自 Catalyst 的优化后的物理计划,并将其分发给集群中的各个节点来实际运行计算任务。此过程中会涉及到调度策略、资源管理等方面的工作。 4. **Storage Layer** 存储层提供了多种持久化选项,支持将中间结果缓存到内存或磁盘中以加速后续迭代式的算法流程。此外还实现了与其他外部系统的集成接口,比如HDFS、S3等文件系统。 5. **API Layers** 对于不同编程语言的支持体现在 API 层面的不同封装形式。对于 Python 用户来说,则通过 PySpark 来访问这些功能丰富的 APIs 进行数据分析工作[^2]。 ```mermaid graph TD; A[PySpark Application] --> B[Catalyst Optimizer]; B --> C[RDD Layer]; C --> D[Execution Engine]; D --> E[Storage Layer]; A --> F[SQL/Python API]; F --> G[User Interaction]; ``` 上述 Mermaid 图展示了 PySpark DataFrame 的基本架构框架,其中包含了从应用程序入口到最后存储输出的主要模块之间的交互路径。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值