# Apache Spark
Apache Sparkは、MapReduceの限界(ファイルI/Oによるパイプライン不能、複雑なジョインの実装労力)を解消するために開発された、最もよく知られたデータフローエンジンの1つである。ワークフロー全体を1つのジョブとして扱い、joinやgroup byのような高水準演算子を、シャーディングとシャッフルアルゴリズムの上に実装する。(Source: [[@2026__OReilly__Designing Data-Intensive Applications 2E - Chapter 11 Batch Processing]] "Dataflow Engines")
- **耐障害性**: 中間データをメモリ上に保持し、収まらない場合はローカルディスクへ「スピル」する。中間データがどう計算されたか(リネージ)を記録しておくことで、データが失われた場合に再計算できる。MapReduceが中間データを常にDFSへ書き戻す方式や、Flinkが定期的なタスクスナップショットのチェックポイントで耐障害性を実現する方式とは異なるアプローチである。(Source: [[@2026__OReilly__Designing Data-Intensive Applications 2E - Chapter 11 Batch Processing]] "Handling faults")
- **クエリ言語**: SparkSQLによりSQLクエリをバッチジョブへ変換でき、コストベースオプティマイザによるジョイン順序の自動最適化を受ける。SparkのDataFrame APIは、Pandasが即時実行するのと異なり、メソッド呼び出しをいったんクエリプランへ変換し、クエリ最適化を経てから分散データフローエンジン上で実行する。(Source: [[@2026__OReilly__Designing Data-Intensive Applications 2E - Chapter 11 Batch Processing]] "Query Languages", "DataFrames")
- **機械学習・グラフ処理**: MLlibが特徴量エンジニアリング・統計関数・分類器などの機械学習ツール群を提供する。グラフ処理にはGraphX APIを用い、bulk synchronous parallel(BSP、Pregelモデル)に基づくグラフアルゴリズム(推薦・ランキング等)を実行できる。(Source: [[@2026__OReilly__Designing Data-Intensive Applications 2E - Chapter 11 Batch Processing]] "Machine Learning")
- **データ統合**: Sparkジョブの出力をHDFSへ書き込み、その後Trino SQLクエリでさらに処理してS3へ出力するといった、複数のデータ処理ツールをまたぐワークフローの一部としても使われる。ETLパイプラインの変換段でも一般的に使用される。(Source: [[@2026__OReilly__Designing Data-Intensive Applications 2E - Chapter 11 Batch Processing]] "Scheduling workflows", "Extract–Transform–Load")
## 関連
- 本ソース: [[@2026__OReilly__Designing Data-Intensive Applications 2E - Chapter 11 Batch Processing]]
- 関連概念: [[データフローエンジン]] / [[MapReduce]] / [[シャッフルと分散結合]]
- 関連実体: [[Apache Flink]](同じくデータフローエンジンの代表例) / [[DuckDB]]