10

Spark SQL DataFrame/Dataset 実行エンジンには、非常に効率的な時間と空間の最適化がいくつかあります (InternalRow と式 codeGen など)。多くのドキュメントによると、ほとんどの分散アルゴリズムでは RDD よりも優れたオプションのようです。

ただし、ソースコードを調査しましたが、まだ確信が持てません。InternalRow がはるかにコンパクトであり、大量のメモリを節約できることは間違いありません。しかし、アルゴリズムの実行は、定義済みの式を保存するよりも高速ではない場合があります。org.apache.spark.sql.catalyst.expressions.ScalaUDFつまり、 のソースコードでは、すべてのユーザー定義関数が次の 3 つのことを行うことが示され ています。

  1. Catalyst タイプ (InternalRow で使用) を scala タイプ (GenericRow で使用) に変換します。
  2. 関数を適用する
  3. 結果をscala型からcatalyst型に戻す

どうやらこれは、関数を変換せずに RDD に直接適用するよりもさらに遅いようです。実際のケースのプロファイリングとコード分析によって、誰かが私の推測を確認または否定できますか?

提案や洞察をありがとうございました。

4

2 に答える 2