PySpark: Integraciones
Aprende a integrar PySpark con Scikit-Learn y TensorFlow para potenciar tus proyectos de aprendizaje automático y deep learning. Optimiza tus flujos de trabajo en Big Data.
Aprende PySpark GRATIS y certifícateLa interoperabilidad de PySpark con librerías de aprendizaje como Scikit learn y TensorFlow facilita el desarrollo de flujos de trabajo híbridos. En muchos casos, se parte de un volumen de datos muy grande que se limpia y se transforma con PySpark, para luego entrenar y evaluar un modelo con dichas librerías cuando el dataset ya se ha reducido o muestreado.
Con Scikit learn, se puede exportar un DataFrame de PySpark a un objeto de pandas cuando el tamaño es manejable en memoria. A partir de ahí, los procedimientos habituales de Scikit learn (como GridSearchCV, cross_val_score o pipelines) funcionan de manera tradicional. Sin embargo, para aprovechar la escalabilidad de Spark, se han creado soluciones como spark-sklearn o joblib-spark, que ayudan a distribuir el entrenamiento y a paralelizar la ejecución de modelos, evitando la limitación monohilo de Scikit learn.
El proceso se suele estructurar así:
- Transformar el conjunto de datos en PySpark (limpieza, filtrado, agregaciones).
- Recoger una muestra (o el dataset completo si es viable) como un DataFrame de pandas.
- Entrenar el modelo de Scikit learn con apoyo de joblib o spark-sklearn.
- Evaluar y ajustar hiperparámetros según métricas de validación.
Para compartir transformaciones, se puede estandarizar la entrada aplicando funciones de PySpark en la fase de ingeniería de datos y replicando esa lógica en Scikit learn mediante transformers afines.
En el caso de TensorFlow, la interacción con PySpark se produce de forma similar: se procesan los datos en un DataFrame de Spark y se exportan al formato necesario para TensorFlow, ya sea un array de NumPy, un tensor o ficheros TFRecord. Con el conector spark-tensorflow-connector, se pueden generar TFRecords de forma distribuida, optimizando la lectura posterior en TensorFlow. Por ejemplo:
from pyspark.sql import SparkSession
from spark_tensorflow_connector import write_dataframe_to_tfrecord
spark = SparkSession.builder \
.appName("SparkTensorFlow") \
.getOrCreate()
df = spark.read.csv("ruta/datos.csv", header=True, inferSchema=True)
write_dataframe_to_tfrecord(df, "ruta/salida_tfrecords")
Después, se aprovecha la API de tf.data para leer esos archivos de manera eficiente en el proceso de entrenamiento. Si se quiere mayor integración, existen soluciones que permiten lanzar clusters de TensorFlow distribuidos con la ayuda de Spark, aunque requieren una configuración más avanzada de orquestación.
En la práctica, el flujo de trabajo suele seguir estos pasos:
- Limpiar y transformar grandes volúmenes de datos en PySpark, generando características relevantes.
- Exportar el resultado a un formato compatible con TensorFlow, como TFRecord o NumPy.
- Entrenar un modelo profundo o una red neuronal en TensorFlow, usando GPU o TPU si se dispone de la infraestructura adecuada.
Por último, hay que recordar que, en muchos escenarios, la sinergia entre PySpark y estas librerías solo se aprovecha plenamente si se acota el volumen de datos en la fase final de entrenamiento. Para modelos de deep learning con datos muy extensos, se suelen combinar técnicas de muestreo o particionado con entrenamientos en iteraciones sucesivas, siempre buscando un equilibrio entre la potencia de Spark y las capacidades nativas de Scikit learn y TensorFlow.
Lecciones de este módulo de PySpark
Lecciones de programación del módulo Integraciones del curso de PySpark.
Ejercicios de programación en este módulo de PySpark
Evalúa tus conocimientos en Integraciones con ejercicios de programación Integraciones de tipo Test, Puzzle, Código y Proyecto con VSCode.