Pyspark中的DataFrame操作汇总

本文介绍了如何使用Pyspark读取csv文件为DataFrame,包括指定schema的方式,并展示了如何生成临时视图进行SQL查询,以及获取DataFrame特定列的值。

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

1. 读取csv文件为DataFrame

通过Pyspark直接读取csv文件可以直接以DataFrame类型进行读取,通过利用schema模式来进行指定模式。

假设我有一个.csv文件,里面有四列数据,长这样,

该.csv文件没有header。分别为用户id,电影id, 电影评分,时间戳 

通过导入Spark SQL中引入数据类型,

import pyspark.sql.types as typ
movie_labels=[('user_id' ,typ.IntegerType()),('product_id',typ.IntegerType()),('rating_id',typ.StringType()),('time_stamp',typ.StringType())]
movie_schema=typ.StructType([typ.StructField(e[0],e[1],False) for e in movie_labels])
movie_rdd =spark.read.csv("/data/lin/train_data/movie_test/u.csv",header=False,schema=movie_schema,sep=",")
movie_rdd.show(2)

StructField可以被分解为一下部分   StructField(name, dataType,nullable) 

name:该字段名字  ; dataType:该字段的数据类型  ; nullable:指示此字段的值是否为空 

### PySpark DataFrame 使用教程及示例 #### 1. 创建 PySpark DataFrame PySpark 提供多种方式创建 DataFrame,可以通过读取文件(如 CSV、JSON)、从现有 RDD 转换或者通过编程接口手动定义数据来创建。以下是几种常见的方式: - **从列表创建 DataFrame** ```python from pyspark.sql import SparkSession spark = SparkSession.builder.appName("example").getOrCreate() data = [("Alice", 1), ("Bob", 2)] columns = ["name", "id"] df = spark.createDataFrame(data).toDF(*columns) df.show() ``` 上述代码展示了如何从 Python 列表创建一个简单的 DataFrame 并显示其内容[^1]。 - **从 CSV 文件加载 DataFrame** ```python df_csv = spark.read.csv("path/to/file.csv", header=True, inferSchema=True) df_csv.show() ``` 此代码片段演示了如何从本地或 HDFS 上的 CSV 文件加载数据并自动推断模式[^4]。 --- #### 2. 基本操作 PySpark DataFrame 支持各种基本操作,例如选择列、过滤行以及添加新列等。 - **选择特定列** ```python selected_df = df.select("name") selected_df.show() ``` 该语句选择了名为 `name` 的列,并将其存储到新的 DataFrame 中。 - **过滤条件** ```python filtered_df = df.filter(df["id"] > 1) filtered_df.show() ``` 这里展示了一个基于布尔表达式的简单过滤器应用案例。 - **新增一列** 可以利用内置函数向现有的 DataFrame 添加额外的一列: ```python from pyspark.sql import functions as F test_with_column = df.withColumn("new_col", F.lit(10)) test_with_column.show() ``` 这段脚本说明了怎样借助 `withColumn()` 方法给每条记录附加固定数的新字段[^3]。 --- #### 3. 高级功能 除了基础的操作外,PySpark 还支持更复杂的查询逻辑,比如聚合统计和窗口函数等功能。 - **分组与计数** ```python grouped_count = df.groupBy("id").count() grouped_count.show() ``` 这是实现按某一维度汇总数量的一个典型例子。 - **排序** 按照指定顺序排列结果集中的项目也很容易做到: ```python sorted_df = df.orderBy(F.desc("id")) sorted_df.show() ``` 此处介绍了降序排列的方法。 --- #### 4. 性能优化建议 为了提高运行效率,在实际生产环境中应考虑以下几个方面: - 合理设置分区数目; - 尽量减少 shuffle 操作次数; - 对频繁访问的小型表格启用广播变量机制等等[^2]。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值