Вопрос или проблема
Если я преобразую Spark DataFrame в Pandas DataFrame, а затем применю операции Pandas и модели sklearn к набору данных в Databricks, будут ли операции из Pandas и sklearn распределены по кластеру? Или мне нужно использовать операции DataFrame PySpark и пакеты PySpark ML для распределения операций?
Краткий ответ: НЕТ.
В момент, когда вы преобразуете Spark DataFrame в Pandas DataFrame, все последующие операции (Pandas, ML и т.д.) будут выполняться на одном ядре, поскольку эти алгоритмы и программы написаны на оригинальном Python и не поддерживают многопоточные распределения. Короче говоря, кому-то придется переписать весь sklearn, чтобы снова сделать его совместимым с Spark.
Тем не менее, есть некоторые достижения в направлении распределения scikit-learn на кластере Spark. Некоторые функции, такие как затратный GridSearch, были переписаны в Spark, и вы можете использовать их вместе с оригинальным sklearn в Databricks, см. эту публикацию, или Joblib Apache Spark Backend (ранее известную как spark-sklearn). Эта публикация в блоге также стоит прочитать.
Ответ или решение
Краткий ответ на ваш вопрос: НЕТ.
Когда вы преобразуете DataFrame Spark в DataFrame Pandas, все последующие операции с использованием Pandas и библиотек машинного обучения, таких как scikit-learn, будут выполняться на одном ядре. Это связано с тем, что алгоритмы и программы, написанные на Python, по своей природе не поддерживают распределенные вычисления на нескольких ядрах. Фактически, для того чтобы использовать возможности распределенной обработки в рамках Apache Spark, необходимо будет переписать большую часть функциональности scikit-learn.
Тем не менее, существуют некоторые достижения в области распределения функций scikit-learn на кластере Spark. Например, была разработана функциональность, позволяющая выполнять распределенные версии таких затратных операций, как GridSearch, что можно использовать вместе с оригинальной библиотекой scikit-learn в Databricks. Вы можете ознакомиться с этой темой в следующих источниках:
- Авто-масштабирование scikit-learn с Apache Spark
- Joblib Apache Spark Backend, которая ранее была известна как spark-sklearn.
- Прогнозирование в масштабе с использованием scikit-learn и pandas UDFs в PySpark.
Если вы хотите воспользоваться преимуществами распределенных вычислений в вашем рабочем процессе, рекомендуется использовать операции с DataFrame Spark и пакеты машинного обучения, разработанные для работы со Spark, такие как MLlib. Это обеспечит высокую производительность и масштабируемость ваших вычислительных задач.