Pandas 如何转换为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并将其转换为PySpark DataFrame使用spark.createDataFrame()方法。
考虑下面的代码。在这个代码中,我们首先创建了一个名为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库将Pandas DataFrame转换为PyArrow Table,使用Table.from_pandas()方法。
接下来,我们使用pq.write_table()方法将PyArrow Table以Parquet格式写入磁盘。这将在当前目录下创建一个名为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|
+-----+---+
结论
总之,将Pandas DataFrame转换为PySpark DataFrame可以使用PyArrow将Pandas DataFrame转换为PyArrow Table,并以Parquet格式写入磁盘。然后可以将生成的Parquet文件读入PySpark DataFrame。
PySpark提供了一个强大的分布式计算框架,可以处理大规模的数据处理,因此在大数据分析中是一个理想的选择。通过使用上述方法将Pandas DataFrame转换为PySpark DataFrame,用户可以充分利用PySpark的强大功能和与Pandas DataFrame一起工作的方便性。