Spark SQL DataFrame/Dataset 実行エンジンには、非常に効率的な時間と空間の最適化がいくつかあります (InternalRow と式 codeGen など)。多くのドキュメントによると、ほとんどの分散アルゴリズムでは RDD よりも優れたオプションのようです。
ただし、ソースコードを調査しましたが、まだ確信が持てません。InternalRow がはるかにコンパクトであり、大量のメモリを節約できることは間違いありません。しかし、アルゴリズムの実行は、定義済みの式を保存するよりも高速ではない場合があります。org.apache.spark.sql.catalyst.expressions.ScalaUDF
つまり、 のソースコードでは、すべてのユーザー定義関数が次の 3 つのことを行うことが示され ています。
- Catalyst タイプ (InternalRow で使用) を scala タイプ (GenericRow で使用) に変換します。
- 関数を適用する
- 結果をscala型からcatalyst型に戻す
どうやらこれは、関数を変換せずに RDD に直接適用するよりもさらに遅いようです。実際のケースのプロファイリングとコード分析によって、誰かが私の推測を確認または否定できますか?
提案や洞察をありがとうございました。