SparkMLにはMLのパッケージとLinearRegressionModel
パッケージのクラスの2つのMLLib
クラスがあることに気付きました。
これら2つはまったく異なる方法で実装されています。 MLLib
の1つはSerializable
を実装しますが、もう1つは実装しません。
ちなみに、RandomForestModel
についてはameがtrueです。
なぜ2つのクラスがあるのですか? 「正しい」ものはどれですか?そして、一方をもう一方に変換する方法はありますか?
o.a.s.mllib
には古いRDDベースのAPIが含まれますが、o.a.s.ml
には、Dataset
およびMLパイプラインを中心とした新しいAPIビルドが含まれています。 ml
とmllib
は2.0.0で機能パリティに到達し、mllib
は徐々に非推奨になり(線形回帰の場合に既に発生しています)、おそらく次の時点で削除されますメジャーリリース。
したがって、目標が下位互換性でない限り、「正しい選択」はo.a.s.ml
。
Spark Mllib
spark.mllibには、RDDの上に構築されたレガシーAPIが含まれています。
Spark ML
spark.mlは、MLパイプラインを構築するためのDataFramesの上に構築された高レベルAPIを提供します。
[ 公式発表
Spark 2.0の時点で、spark.mllibパッケージのRDDベースのAPIはメンテナンスモードに入りました。Sparkの主要なMachine Learning APIは現在DataFrameですspark.mlパッケージのApacheベースのAPI Apache sparkはspark.mlの使用を推奨
- MLlibは、spark.mllibのRDDベースのAPIを引き続きバグ修正とともにサポートします。
MLlibは、RDDベースのAPIに新しい機能を追加しません。
Spark 2.xリリースでは、MLlibはDataFramesベースのAPIに機能を追加して、RDDベースのAPIと同等の機能を実現します。
- 機能パリティ(Spark 2.3)の概算)に達した後、RDDベースのAPIは廃止されます。
- RDDベースのAPIは、Spark 3.0で削除される予定です。
MLlibがDataFrameベースのAPIに切り替わるのはなぜですか?
DataFramesは、RDDよりもユーザーフレンドリーなAPIを提供します。 DataFramesの多くの利点には、Spark Datasources、SQL/DataFrameクエリ、タングステンおよびCatalyst最適化、および言語間の統一APIが含まれます。
MLlib用のDataFrameベースのAPIは、MLアルゴリズムおよび複数の言語にわたって統一されたAPIを提供します。
DataFrameは、実用的なMLパイプライン、特に機能変換を促進します。詳細については、パイプラインガイドを参照してください。
詳細情報はドキュメントを読む- https://spark.Apache.org/docs/latest/ml-guide.html