¿Cómo convertir Pandas a PySpark DataFrame?
Pandas y PySpark son dos herramientas de procesamiento de datos populares en Python. Si bien Pandas es adecuado para trabajar con conjuntos de datos pequeños y medianos en una sola máquina, PySpark está diseñado para el procesamiento distribuido de grandes conjuntos de datos en varias máquinas.
La conversión de un DataFrame de pandas a un PySpark DataFrame puede ser necesaria cuando necesita ampliar su procesamiento de datos para manejar conjuntos de datos más grandes. En esta guía, exploraremos el proceso de convertir un DataFrame de pandas en un DataFrame de PySpark usando la biblioteca PySpark en Python.
Cubriremos los pasos necesarios para instalar y configurar PySpark, convertir un DataFrame de pandas en un PySpark DataFrame y algunas operaciones comunes que puede realizar en PySpark DataFrames.
La sintaxis para crear un PySpark DataFrame usando el método createDataFrame() es la siguiente:
spark.createDataFrame(data, schema)
Aquí, los datos son la lista de valores en los que se crea el DataFrame y el esquema es la estructura del conjunto de datos o una lista de nombres de columnas. El parámetro Spark se refiere al objeto SparkSession en PySpark.
Usando el método spark.createDataFrame()
Aquí hay un código de ejemplo que demuestra cómo crear un DataFrame de pandas y luego convertirlo en un PySpark DataFrame usando el método spark.createDataFrame().
Considere el código que se muestra a continuación. En este código, primero creamos un DataFrame de pandas de muestra llamado df_pandas. Luego creamos un objeto SparkSession usando el método SparkSession.builder, que nos permite trabajar con PySpark.
A continuación, utilizamos el método createDataFrame() proporcionado por el objeto Spark para convertir nuestro DataFrame de pandas en un DataFrame de PySpark. El método createDataFrame() toma el DataFrame de pandas como entrada y devuelve un nuevo objeto PySpark DataFrame.
Finalmente, usamos el método show() para mostrar el contenido del PySpark DataFrame en la consola.
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()
Antes de ejecutar el código anterior, asegúrese de tener las bibliotecas Pandas y PySpark instaladas en su sistema.
Producción
Al ejecutarse, producirá el siguiente resultado:
+----+---+-------+
|Name|Age| Salary|
+----+---+-------+
|John| 30|50000.0|
|Jane| 25|60000.0|
| Bob| 40|70000.0|
+----+---+-------+
Usando ArrowSpark
Aquí hay un código actualizado que demuestra cómo usar Apache Arrow para mejorar el rendimiento de la conversión de un DataFrame de Pandas en un DataFrame de PySpark.
Considere el código que se muestra a continuación. En este código, primero creamos un DataFrame de pandas de muestra llamado df_pandas. Luego usamos la biblioteca PyArrow para convertir el DataFrame de pandas en una tabla PyArrow usando el método Table.from_pandas().
A continuación, escribimos la tabla PyArrow en el disco en formato Parquet usando el método pq.write_table(). Esto crea un archivo llamado data.parquet en el directorio actual.
Finalmente, usamos el método spark.read.parquet() para leer el archivo Parquet en un PySpark DataFrame llamado df_spark. Luego podemos usar el método show() para mostrar el contenido del PySpark DataFrame en la consola.
El uso del formato Apache Arrow y Parquet para convertir datos entre Pandas y PySpark puede mejorar el rendimiento al reducir la sobrecarga de serialización de datos y permitir un almacenamiento en columnas eficiente.
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()
Para ejecutar el código anterior, primero necesitamos instalar la biblioteca pyarrow en nuestra máquina, y para eso podemos usar el comando que se muestra a continuación.
pip3 install pyarrow
Producción
Al ejecutarse, producirá el siguiente resultado:
+-----+---+
| Name|Age|
+-----+---+
|John | 30|
|Jane | 25|
| Bob| 40|
+-----+---+
Conclusión
En conclusión, la conversión de un Pandas DataFrame a un PySpark DataFrame se puede realizar usando PyArrow para convertir el Pandas DataFrame en una tabla PyArrow y escribirlo en el disco en formato Parquet. El archivo Parquet resultante se puede leer en un PySpark DataFrame.
PySpark proporciona un potente marco informático distribuido que puede manejar el procesamiento de datos a gran escala, lo que lo convierte en una opción ideal para el análisis de big data. Al utilizar los métodos anteriores para convertir Pandas DataFrames en PySpark DataFrames, los usuarios pueden aprovechar tanto las potentes funciones de PySpark como la conveniencia de trabajar con Pandas DataFrames.