PySpark 数据框转 CSV

31 Jan 2025 | 4 分钟阅读
PySpark DataFrame to CSV

Apache Spark 是一个有效的分散式计算设备,专为海量数据处理而设计。 PySpark 是 Apache Spark 的 Python API,让您能够在利用 Spark 在大型记录分析中的强大功能的同时,掌握 Python 的简便性。 信息处理中一个普遍的挑战是将 PySpark DataFrame 导出到 CSV 记录。 本指南将探索此过程中涉及的各种步骤和注意事项。

PySpark 简介

在深入研究导出 DataFrame 的细节之前,重要的是了解 PySpark 的基础知识。 PySpark 将 Python 的简便性与 Apache Spark 的分布式计算能力集成在一起。 这允许在计算机集群上有效处理大型数据集。 PySpark 尤其适用于信息工程任务,例如 ETL(提取、转换、加载),以及高级信息分析和机器学习。

设置 PySpark

要开始使用 PySpark,您需要安装 Apache Spark 和 PySpark。 您可以使用 pip 执行此操作

此外,如果您的系统上安装了 Java 会很有帮助,因为 Spark 在 Java 虚拟机 (JVM) 上运行。

创建 Spark 会话

在使用 DataFrame 之前,您需要创建一个 Spark 会话。 Spark 会话是任何 Spark 功能的入口点

使用 PySpark 中的 DataFrame

PySpark DataFrame 是记录的分布式集合,组织成命名列,概念上相当于关系数据库中的表或 R/Pandas 中的记录框架。 DataFrame 可以由各种数据源制成,包括 JSON 文件、Parquet 文档、数据库等。

1. 创建 DataFrame

或者来自元组列表

2. 将 DataFrame 导出到 CSV

将 PySpark DataFrame 导出到 CSV 文件是一项常见任务,可以使用 PySpark 提供的 `write` 方法来实现。 这是一个循序渐进的指南

基本导出到 CSV

将 DataFrame 保存到 CSV 的最直接方法是使用 `write.csv` 方法

此命令会将 DataFrame 保存到指定路径中名为 `output` 的文件夹中。 默认情况下,Spark 会将每个分区作为单独的文件保存在此文件夹中。

使用标头和特定分隔符保存

您通常希望包含标头并使用特定的分隔符。 您可以使用以下选项来实现此目的

模式选项

`mode` 选项指定如何处理输出位置的现有数据。 常见的模式是

  • `append`:将新数据附加到现有数据。
  • `overwrite`:覆盖现有数据。
  • `ignore`:如果输出位置已存在,则忽略新数据。
  • `error`(默认):如果输出位置已存在,则抛出错误。

示例

3. 处理 Null 值

您可以指定如何处理 CSV 文件中的 null 值。 例如,您可以使用默认字符串填充 null 值

4. 合并分区

默认情况下,PySpark 可能会将输出保存到多个文件中。 如果要将这些合并到单个 CSV 文件中,可以使用 `coalesce` 方法

但是,请谨慎对待大型数据集,因为合并到单个文件中可能会导致性能问题。

高级选项和最佳实践

1. 压缩

为了节省空间,您可以压缩 CSV 文件。 PySpark 支持多种压缩格式,例如 `gzip`、`bzip2` 和 `snappy`

2. 分区

分区是一种提高性能和可管理性的技术。 您可以按特定列对输出进行分区

3. 自定义引号和转义字符

如果您的数据包含特殊字符,您可能需要指定自定义引号和转义字符

4. 保存到单个文件

如果您需要将输出保存在单个文件中,您可以将 `coalesce` 与 `.csv` 方法结合使用,但请注意大型数据集的潜在内存和性能问题

df.coalesce(1).write.csv("path/to/output")

5. 导出选定的列

如果您需要导出 DataFrame 中最好的特定列,您可能会在写入之前选择这些列

结论

将 PySpark DataFrame 导出到 CSV 是一种诚实的方法,但它提供了多种选择来根据您的需求定制输出。 无论您是处理海量数据集还是特定的格式要求,PySpark 都能提供有效处理它们的能力。 了解这些选项和最佳实践可确保您可以有效地管理数据导出任务,从而使您的数据分析和 ETL 流程更加顺畅和可靠。

总而言之,使用 PySpark DataFrame 并将其导出到 CSV 涉及

  1. 设置和配置 PySpark。
  2. 创建和操作 DataFrame。
  3. 使用带有各种自定义选项的 `write.csv` 方法。
  4. 应用卓越的性能和可管理性实践,例如分区和压缩。

通过学习这些策略,您可以利用 PySpark 在您的海量事实任务中的全部能力。