Apache Spark は、構造化データ、半構造化データ、非構造化データを大規模に処理するように設計された分散処理エンジンです。デベロッパーは Spark API を使用してエンジンを操作し、分散データ オペレーションを定義します。
最新の Spark 開発の中核となるのは、Spark DataFrame API です。DataFrame は、リレーショナル データベースのテーブルやスプレッドシートのように、分散データを名前付きの列に整理して処理します。構造化された宣言型インターフェースを提供し、大規模なデータセットを分析しながら、バックグラウンドで物理的な実行を自動的に最適化します。
Spark API が分散ネットワーク全体でコードを実行する仕組みを理解するには、そのランタイム アーキテクチャの基本コンポーネントを理解することが重要です。
分散データ パイプラインを設計する際、デベロッパーは次の 2 つの主要なプログラミング インターフェースのいずれかを選択します。
データ エンジニアリングとデータ サイエンスのほぼすべてのユースケースで、DataFrame API が推奨されます。RDD は、カスタム Java オブジェクトを使用して未加工の非構造化データ(バイナリ ファイルやメディア ストリームなど)を操作する必要があるシナリオでのみ使用されます。DataFrame は、必要なコードが少なく、自動的に高速化され、オフヒープ バイナリメモリ管理を利用して JVM ガベージ コレクションのボトルネックを回避します。
Spark DataFrame API は、大量のデータの処理、クレンジング、準備という計算負荷の高いタスクを簡素化します。
Spark DataFrame API は、Spark の高度な処理ライブラリのプログラマティックな基盤として機能します。
宣言型の最適化
DataFrame は、Catalyst オプティマイザーと呼ばれる組み込みのクエリ オプティマイザーを使用します。DataFrame コードを記述すると、オプティマイザーが物理実行プランを自動的に書き換え、フィルタ プッシュダウン、プロジェクション プルーニング、結合の並べ替えを適用して、手動での調整を行わずに可能な限り高速に実行します。
言語の柔軟性
チームが Python(PySpark)、Scala、Java、R のいずれでコードを記述しても、DataFrame API は同じパフォーマンスを保証します。基盤となる実行プランは、JVM に依存しない同じ実行レイヤ内でコンパイルされ、最適化されます。
効率的なメモリ管理
DataFrame は、Tungsten 実行エンジンを利用して、高度に圧縮されたオフヒープ バイナリ形式でデータを保存します。これにより、JVM オブジェクト作成のオーバーヘッドが排除され、ガベージ コレクションの一時停止によるエグゼキュータ スレッドのフリーズが防止されます。
従来、オープンソースの Spark を実行するには、手動でのクラスタ構成、ソフトウェア バージョン管理、複雑なネットワーク ピアリングが必要でした。Google Cloud は、Managed Service for Apache Spark を提供することでこれを簡素化し、分散実行をフルマネージドのエンタープライズ向けデータ プラットフォームに変換します。
データチームは、次の機能を使用して Google Cloud で Spark DataFrame ワークロードを実行します。