Apache Spark
プロジェクト全体の基盤であり、RDD抽象化を中心とするアプリケーションプログラミングインターフェイス(Java、Python、Scala、R)を介して公開される分散タスクディスパッチ、スケジューリング、および基本I/O機能を実装している。(Java APIは他のJVM言語でも使用でき、Juliaなどの他の非JVM言語でも使用できる。)「ドライバ」プログラムは、関数をSparkに渡すことによってRDD上でmap、 filter 、reduceなどの並列操作を呼び出し、関数の実行をクラスタ上で並列にスケジュールする。 [2]これらの操作や結合などの追加操作は、RDDを入力として受け取り、新しいRDDを生成する。RDDはイミュータブルで遅延評価している。耐故障性は、データ消失の場合に再構成できるように各RDDの「系統」(生成操作)を追跡により達成される。RDDには任意の種類のPython、Java、Scalaオブジェクトを含められる。
RDD指向の機能的プログラミングスタイルの他に、共有変数の2つの制限形式がある。ブロードキャスト変数はすべてのノードで利用可能な読み取り専用データを参照し、アキュムレータは命令型プログラミングの削減をプログラムできる。
RDD中心の関数型プログラミングの典型例は、テキストファイルのセット内に出現するすべての単語の頻度を計算し、最も一般的なものを表示する次のScalaプログラムである。各マップflatMap(マップの変形)とreduceByKeyは、単一のデータ項目(または項目のペア)に対して簡単な操作を実行し、その引数を適用してRDDを新しいRDDに変換する無名関数をとる。