Spark DataFrame API とは

Apache Spark は、構造化データ、半構造化データ、非構造化データを大規模に処理するように設計された分散処理エンジンです。デベロッパーは Spark API を使用してエンジンを操作し、分散データ オペレーションを定義します。


最新の Spark 開発の中核となるのは、Spark DataFrame API です。DataFrame は、リレーショナル データベースのテーブルやスプレッドシートのように、分散データを名前付きの列に整理して処理します。構造化された宣言型インターフェースを提供し、大規模なデータセットを分析しながら、バックグラウンドで物理的な実行を自動的に最適化します。

Spark API のアーキテクチャと実行

Spark API が分散ネットワーク全体でコードを実行する仕組みを理解するには、そのランタイム アーキテクチャの基本コンポーネントを理解することが重要です。


  • ドライバ: Spark アプリケーションの中央コーディネーター。コードを読み取り、宣言型のオペレーションを論理的な実行プランに変換し、ワーカーノード全体でタスクをスケジュールします。
  • クラスタ マネージャー: クラスタ全体に CPU、メモリ、ネットワーキング リソースをプロビジョニングするリソース アロケータ(Kubernetes やスタンドアロンのリソース マネージャーなど)。
  • エグゼキュータ: クラスタノードで実行されるワーカー インスタンス。ドライバからタスクの指示を受け取り、メモリ内でローカルにデータ処理オペレーションを実行して、結果を返すかストレージに書き込みます。
  • DAG、ステージ、タスク: Spark はデータ変換を 1 行ずつ実行しません。代わりに、ドライバが DataFrame コードを物理演算子の有向非巡回グラフ(DAG)にコンパイルします。ドライバは、これらの演算子を、データ シャッフル境界によって分割される「ステージ」と呼ばれる広範な実行フェーズにグループ化し、それらのステージを個々のタスクに分解して、並列実行のためにエグゼキュータに分散します。

Spark RDD と DataFrame の違いは何ですか。

分散データ パイプラインを設計する際、デベロッパーは次の 2 つの主要なプログラミング インターフェースのいずれかを選択します。


  • Spark RDD(耐障害性分散データセット): 元の低レベル Spark API。クラスタ全体に分散された JVM オブジェクトの不変でフォールト トレラントなコレクションを表します。RDD には任意の Java オブジェクトが含まれるため、実行エンジンは内部構造を検査できません。そのため、デベロッパーは低レベルの変換ロジックを手動で記述して調整する必要があり、多くの場合、ガベージ コレクションのオーバーヘッドが大きくなり、シリアル化が遅くなります。
  • Spark DataFrame: 構造化データ処理の最新標準。DataFrame は、厳密なスキーマで定義された行と列にデータを整理します。実行エンジンはデータセットのデータ型と構造を理解しているため、コードを実行する前に自動的に最適化できます。

RDD ではなく DataFrame を選ぶ理由

データ エンジニアリングとデータ サイエンスのほぼすべてのユースケースで、DataFrame API が推奨されます。RDD は、カスタム Java オブジェクトを使用して未加工の非構造化データ(バイナリ ファイルやメディア ストリームなど)を操作する必要があるシナリオでのみ使用されます。DataFrame は、必要なコードが少なく、自動的に高速化され、オフヒープ バイナリメモリ管理を利用して JVM ガベージ コレクションのボトルネックを回避します。

データチームが Spark API を使用する方法

Spark DataFrame API は、大量のデータの処理、クレンジング、準備という計算負荷の高いタスクを簡素化します。


  • データ エンジニア: エンジニアは DataFrame API を使用して、復元力とフォールト トレランスに優れたデータ パイプラインを構築します。元データを抽出し、スキーマを適用して、構造化変換を実行し、適合したテーブルをデータレイクまたはクラウド データ ウェアハウスに書き込みます。宣言型の構文により、コードの複雑さとメンテナンスのオーバーヘッドを最小限に抑えながら、毎日テラバイト単位のデータを処理できます。
  • データ サイエンティスト: データ サイエンティストは、DataFrame API を使用して、1 台のマシンのメモリ上限を超える大規模なデータセットを探索し、準備します。ワーカーノードにデータ パーティションを分散することで、探索的データ分析、null 値のクリーンアップ、特徴量のエンジニアリングを大規模に実行し、分析情報を得るまでの時間を短縮できます。

DataFrame API を基盤とするコアライブラリ

Spark DataFrame API は、Spark の高度な処理ライブラリのプログラマティックな基盤として機能します。


  • Spark SQL: このモジュールを使用すると、Spark データセットに対して ANSI SQL クエリを直接実行できます。DataFrame を一時ビューとしてクエリし、宣言型の Python または Scala コードを標準 SQL クエリとシームレスに組み合わせることができます。
  • 構造化ストリーミング: このエンジンは、リアルタイム データの継続的なストリームを処理します。静的バッチ処理と同じ DataFrame API コマンドを使用し、マイクロバッチ処理、フォールト トレランス、状態管理を自動的に処理します。
  • MLlib: Spark の分散機械学習ライブラリは、DataFrame を使用してトレーニング データセットを管理、準備し、分類、回帰、クラスタリング、協調フィルタリングのための組み込みのスケーラブルなアルゴリズムを提供します。

Spark DataFrame API のメリット

宣言型の最適化

DataFrame は、Catalyst オプティマイザーと呼ばれる組み込みのクエリ オプティマイザーを使用します。DataFrame コードを記述すると、オプティマイザーが物理実行プランを自動的に書き換え、フィルタ プッシュダウン、プロジェクション プルーニング、結合の並べ替えを適用して、手動での調整を行わずに可能な限り高速に実行します。

言語の柔軟性

チームが Python(PySpark)、Scala、Java、R のいずれでコードを記述しても、DataFrame API は同じパフォーマンスを保証します。基盤となる実行プランは、JVM に依存しない同じ実行レイヤ内でコンパイルされ、最適化されます。

効率的なメモリ管理

DataFrame は、Tungsten 実行エンジンを利用して、高度に圧縮されたオフヒープ バイナリ形式でデータを保存します。これにより、JVM オブジェクト作成のオーバーヘッドが排除され、ガベージ コレクションの一時停止によるエグゼキュータ スレッドのフリーズが防止されます。

Google Cloud で Spark DataFrame API を使用する方法

従来、オープンソースの Spark を実行するには、手動でのクラスタ構成、ソフトウェア バージョン管理、複雑なネットワーク ピアリングが必要でした。Google Cloud は、Managed Service for Apache Spark を提供することでこれを簡素化し、分散実行をフルマネージドのエンタープライズ向けデータ プラットフォームに変換します。


データチームは、次の機能を使用して Google Cloud で Spark DataFrame ワークロードを実行します。


  • サーバーレス クラスタとマネージド クラスタのデプロイ: Google Cloud では、運用ニーズに合った実行モデルを選択できます。DataFrame コードをサーバーレス モードで実行してバッチジョブを直接送信し、リソースが自動的にスケーリングされる正確な実行時間(秒単位)に対してのみ料金を支払うことも、継続的なワークロード向けに高度にカスタマイズ可能な永続的なマネージド クラスタをデプロイすることもできます。
  • 最適化された BigQuery 接続: Spark-BigQuery コネクタは、BigQuery データをネイティブの Apache Arrow 形式で直接使用することで、JVM の行指向の変換を回避します。データ サイエンティストは、統合されたノートブック インターフェースを使用して、環境を切り替えることなく、同じ管理されたデータセットに対して PySpark DataFrame コードと SQL クエリを実行することもできます。
  • ベクトル化されたネイティブ C++ 実行: Google Cloud で Spark ワークロードを実行する場合、サーバーレス バッチまたはマネージド クラスタで Lightning Engine を有効にできます。このネイティブ C++ クエリ実行エンジンは、Velox と Gluten を使用して物理クエリプランをネイティブ命令に直接コンパイルします。JVM Volcano イテレータ モデルとガベージ コレクションのボトルネックを回避することで、コードを変更することなく、DataFrame と Spark SQL のワークロードを最大 4.9 倍高速化します。


次のステップ

$300 分の無料クレジットと 20 以上の Always Free プロダクトを活用して、Google Cloud で構築を開始しましょう。

  • Google Cloud プロダクト
  • 100 種類を超えるプロダクトをご用意しています。新規のお客様には、ワークロードの実行、テスト、デプロイができる無料クレジット $300 分を差し上げます。また、すべてのお客様に 25 以上のプロダクトを無料でご利用いただけます(毎月の使用量上限があります)。
Google Cloud