Какая разница между пакетами Spark ML и MLLIB
Я заметил, что в SparkML есть два класса LinearRegressionModel
, один в ML и еще один в пакете MLLib
.
Эти два реализованы совершенно по-другому - например. один из MLLib
реализует Serializable
, а другой - нет.
Кстати, истина о RandomForestModel
.
Почему существуют два класса? Какой из них "правильный"? И есть ли способ конвертировать один в другой?
Ответы
Ответ 1
oasmllib
содержит старый API на основе RDD, в то время как oasml
содержит новую сборку API вокруг Dataset
и ML Pipelines. ml
и mllib
достигли функционального паритета в 2.0.0, а mllib
медленно устаревает (это уже произошло в случае линейной регрессии) и, скорее всего, будет удалено в следующем основном выпуске.
Так что, если ваша цель - обратная совместимость, тогда "правильный выбор" - это oasml
.
Ответ 2
Spark Mllib
spark.mllib содержит устаревший API, созданный на основе RDD.
Spark ML
spark.ml предоставляет высокоуровневый API, построенный поверх DataFrames, для построения конвейеров ML.
Согласно [ официальное объявление
Начиная с Spark 2.0, API на основе RDD в пакете spark.mllib перешли в режим обслуживания. Основным API машинного обучения для Spark теперь является API на основе DataFrame в пакете spark.ml. Apache spark рекомендуется использовать spark.ml
Почему MLlib переключается на API на основе DataFrame?
-
DataFrames предоставляют более удобный API, чем RDD. Многочисленные преимущества DataFrames включают источники данных Spark, запросы SQL/DataFrame, оптимизации Tungsten и Catalyst, а также унифицированные API для разных языков.
-
API на основе DataFrame для MLlib предоставляет единый API для алгоритмов ML и для нескольких языков.
-
DataFrames облегчают практические ML Pipelines, в частности, преобразования функций. Смотрите руководство по трубопроводам для деталей.
Подробнее читайте в документе - https://spark.apache.org/docs/latest/ml-guide.html.