如何将 Pandas DataFrame 转换为 PySpark DataFrame?
Pandas 和 PySpark 是 Python 中两种流行的数据处理工具。Pandas 非常适合处理单机上的小型到中型数据集,而 PySpark 则设计用于跨多台机器对大型数据集进行分布式处理。
当您需要扩展数据处理以处理更大的数据集时,可能需要将 Pandas DataFrame 转换为 PySpark DataFrame。在本指南中,我们将探讨使用 Python 中的 PySpark 库将 Pandas DataFrame 转换为 PySpark DataFrame 的过程。
我们将介绍安装和设置 PySpark、将 Pandas DataFrame 转换为 PySpark DataFrame 以及您可以在 PySpark DataFrame 上执行的一些常见操作。
使用 `createDataFrame()` 方法创建 PySpark DataFrame 的语法如下所示:
spark.createDataFrame(data, schema)
其中,`data` 是创建 DataFrame 的值列表,`schema` 或者是数据集的结构,或者是一个列名列表。`spark` 参数指的是 PySpark 中的 SparkSession 对象。
使用 `spark.createDataFrame()` 方法
以下示例代码演示了如何创建一个 Pandas DataFrame,然后使用 `spark.createDataFrame()` 方法将其转换为 PySpark DataFrame。
考虑以下代码。在这段代码中,我们首先创建一个名为 `df_pandas` 的示例 Pandas DataFrame。然后,我们使用 `SparkSession.builder` 方法创建一个 SparkSession 对象,这使我们可以使用 PySpark。
接下来,我们使用 `spark` 对象提供的 `createDataFrame()` 方法将 Pandas DataFrame 转换为 PySpark DataFrame。`createDataFrame()` 方法将 Pandas DataFrame 作为输入,并返回一个新的 PySpark DataFrame 对象。
最后,我们使用 `show()` 方法将 PySpark DataFrame 的内容显示到控制台。
import pandas as pd from pyspark.sql import SparkSession # Create a sample pandas DataFrame data = {'Name': ['John', 'Jane', 'Bob'], 'Age': [30, 25, 40], 'Salary': [50000.0, 60000.0, 70000.0]} df_pandas = pd.DataFrame(data) # Create a SparkSession object spark = SparkSession.builder.appName('PandasToSparkDF').getOrCreate() # Convert pandas DataFrame to PySpark DataFrame df_spark = spark.createDataFrame(df_pandas) # Show the PySpark DataFrame df_spark.show()
在运行上述代码之前,请确保您的系统已安装 Pandas 和 PySpark 库。
输出
执行后,将产生以下输出:
+----+---+-------+ |Name|Age| Salary| +----+---+-------+ |John| 30|50000.0| |Jane| 25|60000.0| | Bob| 40|70000.0| +----+---+-------+
使用 ArrowSpark
以下更新的代码演示了如何使用 Apache Arrow 来提高将 Pandas DataFrame 转换为 PySpark DataFrame 的性能。
考虑以下代码。在这段代码中,我们首先创建一个名为 `df_pandas` 的示例 Pandas DataFrame。然后,我们使用 PyArrow 库使用 `Table.from_pandas()` 方法将 Pandas DataFrame 转换为 PyArrow Table。
接下来,我们使用 `pq.write_table()` 方法以 Parquet 格式将 PyArrow Table 写入磁盘。这将在当前目录中创建一个名为 `data.parquet` 的文件。
最后,我们使用 `spark.read.parquet()` 方法将 Parquet 文件读取到名为 `df_spark` 的 PySpark DataFrame 中。然后,我们可以使用 `show()` 方法将 PySpark DataFrame 的内容显示到控制台。
使用 Apache Arrow 和 Parquet 格式在 Pandas 和 PySpark 之间转换数据可以通过减少数据序列化开销和实现高效的列式存储来提高性能。
import pandas as pd from pyspark.sql import SparkSession import pyarrow as pa import pyarrow.parquet as pq # Create a sample pandas DataFrame data = {'Name': ['John', 'Jane', 'Bob'], 'Age': [30, 25, 40], 'Salary': [50000.0, 60000.0, 70000.0]} df_pandas = pd.DataFrame(data) # Convert pandas DataFrame to PyArrow Table table = pa.Table.from_pandas(df_pandas) # Write the PyArrow Table to Parquet format pq.write_table(table, 'data.parquet') # Create a SparkSession object spark = SparkSession.builder.appName('PandasToSparkDF').getOrCreate() # Read the Parquet file into a PySpark DataFrame df_spark = spark.read.parquet('data.parquet') # Show the PySpark DataFrame df_spark.show()
要运行上述代码,我们首先需要在我们的机器上安装 **pyarrow** 库,为此,我们可以使用以下命令:
pip3 install pyarrow
输出
执行后,将产生以下输出:
+-----+---+ | Name|Age| +-----+---+ |John | 30| |Jane | 25| | Bob| 40| +-----+---+
结论
总之,可以使用 PyArrow 将 Pandas DataFrame 转换为 PyArrow Table 并将其以 Parquet 格式写入磁盘来将 Pandas DataFrame 转换为 PySpark DataFrame。然后,可以将生成的 Parquet 文件读取到 PySpark DataFrame 中。
PySpark 提供了一个强大的分布式计算框架,可以处理大规模数据处理,使其成为大数据分析的理想选择。通过使用上述方法将 Pandas DataFrame 转换为 PySpark DataFrame,用户可以同时利用 PySpark 的强大功能和使用 Pandas DataFrame 的便利性。