使用 PySpark DataFrame 填充缺失值的完整指南

在数据分析中,我们常常需要处理缺失值。PySpark 提供了多种处理缺失值的方法。本文将详细阐述如何使用 PySpark DataFrame 填充缺失值。

流程概述

在处理缺失值时,通常需要按照以下步骤进行:

步骤 描述
1 创建 Spark 会话
2 创建 DataFrame
3 查看 DataFrame 的缺失值
4 使用合适的方法填充缺失值
5 验证填充后的 DataFrame

步骤 1: 创建 Spark 会话

首先,我们需要创建一个 Spark 会话,这是使用 PySpark 的第一步。

from pyspark.sql import SparkSession

# 创建一个 Spark 会话
spark = SparkSession.builder \
    .appName("Fill Missing Values") \
    .getOrCreate()

代码解释

  • SparkSession.builder:用于构建 Spark 会话。
  • appName:为我们的应用程序命名(可自定义)。
  • getOrCreate():创建或获取当前的 Spark 会话。

步骤 2: 创建 DataFrame

接下来,我们需要创建一个 DataFrame 用于演示缺失值的填充。

from pyspark.sql import Row

# 创建示例数据
data = [
    Row(name="Alice", age=25, city="New York"),
    Row(name="Bob", age=None, city="Los Angeles"),
    Row(name="Cathy", age=30, city=None),
    Row(name="David", age=None, city="Chicago"),
]

# 创建 DataFrame
df = spark.createDataFrame(data)
# 显示初始 DataFrame
df.show()

代码解释

  • Row:用于创建结构化数据。
  • data:包含了一些行,有些行的年龄或城市为 None (缺失值)。
  • createDataFrame(data):通过示例数据创建 DataFrame。

步骤 3: 查看 DataFrame 的缺失值

在填充缺失值之前,我们应该查看 DataFrame 中的缺失值情况。

# 查看 DataFrame 中的缺失值
df.describe().show()

代码解释

  • describe():用于获取 DataFrame 的基本统计信息,包括非空计数等。
  • show():显示结果。

步骤 4: 使用合适的方法填充缺失值

接下来,我们需要根据业务需求来填充缺失值。这里我们将给每个缺失的 age 使用平均值填充,将 city 用 “Unknown” 填充。

from pyspark.sql.functions import mean, when

# 计算平均年龄
avg_age = df.select(mean(df.age)).collect()[0][0]

# 填充缺失的年龄和城市
filled_df = df.fillna({"age": avg_age, "city": "Unknown"})
# 显示填充后的 DataFrame
filled_df.show()

代码解释

  • mean(df.age):计算 age 列的平均值。
  • collect():将结果转为 Python 列表类型。
  • fillna():根据指定的字典填充缺失值。
  • {"age": avg_age, "city": "Unknown"}:实验性填充值。

步骤 5: 验证填充后的 DataFrame

最后,我们需要检查填充后的 DataFrame 是否正确。

# 查看填充后的 DataFrame
filled_df.show()

代码解释

  • show():再次显示 DataFrame,以验证填充效果。

序列图

我们可以使用序列图来概括以上步骤:

sequenceDiagram
    participant Developer
    participant Spark

    Developer->>Spark: 创建 Spark 会话
    Developer->>Spark: 创建示例 DataFrame
    Developer->>Spark: 查看缺失值
    Developer->>Spark: 填充缺失值 (年龄用平均,城市用 "Unknown")
    Developer->>Spark: 验证结果

结尾

本文详细描述了如何在 PySpark DataFrame 中填充缺失值的过程。我们从创建 Spark 会话入手,逐步创建示例 DataFrame,并查看缺失值的情况,最后通过填充缺失值来完成数据预处理。希望这篇文章能帮助刚入行的小白更清晰地理解和执行缺失值的处理。随着数据分析技能的提升,能够有效处理缺失值将为你今后的工作打下坚实基础。如果还有其他问题或想法,请尽管提出来!