¿Mejor ejecución de trabajos de Machine Learning directamente desde Pyspark o integración de scikit-learn en, a través del método de paralelización SparkContext?

Creo que todos los algoritmos de aprendizaje de scikit están destinados a ejecutarse en una sola máquina, mientras que Spark es básicamente una plataforma de procesamiento paralelo (y proporciona un conjunto limitado de algoritmos paralelos en sus paquetes MLLib y ML). Entonces, para usar scikit-learn con Spark, necesitaría paralelizar su tubería de alguna manera. Algunas posibilidades:

Dan Tran ya ha señalado la búsqueda de cuadrícula, donde puede entrenar muchos modelos con hiperparámetros ligeramente diferentes en paralelo y seleccionar el mejor. Esta publicación de blog en el blog Databricks: Auto-escalado scikit-learn con Spark describe un complemento que le permite pasar de la búsqueda de cuadrícula en su máquina local con scikit-learn a hacerlo en Spark con un cambio de una línea a su declaración de importación.

Su enlace muestra otra forma de aprovechar el paralelismo, tomando subconjuntos aleatorios de datos con reemplazo y entrenando un modelo en cada uno de estos subconjuntos, luego uniéndolos. Así es como funcionan los bosques aleatorios por cierto. El algoritmo Random Forest ya está disponible en Spark, pero esto podría abrir posibilidades para usar conjuntos de algoritmos que actualmente no están disponibles en Spark pero están disponibles en scikit-learn de esta manera.

Hay otras formas más creativas en las que las capacidades de scikit-learn se pueden usar dentro de Spark. Por ejemplo, aquí están las diapositivas de la charla de Natalino Busa Detección de anomalías en tiempo real con Spark MLlib, Akka y Cassandra donde describe el uso de DBSCAN de scikit-learn para agrupar lugares para usuarios individuales (para detectar lugares atípicos) después de usar Spark para dividir el datos del lugar por usuario ya.

Entonces (en mi humilde opinión), no creo que necesariamente necesitemos integrar scikit-learn en Spark, ya que su premisa básica (en torno al paralelismo) es muy diferente. PySpark ya ofrece una forma de llamar a scikit-learn de Spark, por lo que siempre podríamos usarlo según sea necesario.

Depende del problema que tenga y de dónde usarlo. Si tiene un problema de “big data”, tiene sentido usar modelos ML de pyspark. Pyspark y scikit-learn, por ejemplo, tienen sentido si necesita entrenar muchos modelos en paralelo o hacer una búsqueda en cuadrícula para encontrar el mejor modelo. Básicamente, eso es lo que está haciendo el código en el enlace que está dando.