メインコンテンツへジャンプ

Spark API

Databricks 無料トライアル

Sparkには、DataFrame、Dataset、RDDの3つのAPIがあります。

レジリエントな分散データセット(RDD)とは

レジリエントな分散データセット(RDD)は、分散コンピューティングを用いたレコードコレクションです。フォールトトレラントで不変な性質を有しています。RDDは、低レベルAPIとの並列操作が可能で、遅延機能によりSparkの操作を迅速化します。また、RDDは2つの操作をサポートしています。

  • トランスフォーメーション:別の RDD を返す遅延操作(map()、flatmap()、filter()など)。この RDD はアクションが実行されない限り計算されません。 Spark API: RDD変換
  • アクション:計算をトリガーし、結果を返す操作(count()、top()、saveToFile() など) Spark API: RDDアクション

RDDのデメリット

RDDを使用する場合、それぞれのRDDを最適化する必要があります。さらに、DatasetやDataFrameとは異なり、RDDは取り込まれたデータのスキーマを推論しないため、スキーマの指定が必要になります。

DataFrameとは

DataFrameとは、名前つき列の下にある行の分散コレクションです。簡単に言うと、列見出しのあるエクセルシートのようなもので、リレーショナルデータベースのテーブルやRまたはPythonのDataFrameに相当します。DataFrameには、RDDとの共通点が3つあります。

  • 不変性:DataFrameの作成は可能ですが、作成後の変更はできません。RDDと同様、変換のみが可能です。
  • 遅延評価:アクションがトリガーされるまでタスクは実行されません。
  • 分散型:DataFrameはRDDと同様、分散型です。

DataFrameの作成方法

SparkにおけるDataFrameの作成方法は、いくつかあります。

  • 異なるデータフォーマットの使用(JSON, CSV, RDBMS, XML, Parquetからデータを読み込むなど)
  • 既存のRDDからデータを読み込む
  • プログラムでスキーマを指定する

DataFramesのデメリット

DataFrame APIの最大のデメリットは、コンパイル時間を安全にサポートしていないことです。そのため、データ構造が不明な場合に、ユーザーは制限を受けることになります。

Datasetとは

Datasetとは、リレーショナルスキーマにマップされた、型付きで、不変のオブジェクトのコレクションです。Datasetは、JVMオブジェクトを使用して作成し、複雑な関数変換を用いて操作することが可能です。Datasetは、2つの方法で作成できます。

  • 動的に作成する
  • SparkSessionを使用して、JSONファイルから読み込む

DataSetsのデメリット

Datasetの主なデメリットは、文字列への型キャストが必要なことです。

FAQ

1. Spark APIにはどのような種類がありますか?
Spark APIには、RDD・DataFrame・Datasetの3種類があり、抽象度と用途が異なります。

2. Spark APIで最も一般的に使われるのはどれですか?
現在は、最適化やSQL連携に優れるSpark API(DataFrame)が最も広く利用されています。

3. Spark APIでRDDを使う場面はありますか?
低レベルな制御やカスタム処理が必要な場合には、Spark APIのRDDが有効です。

関連資料

用語集に戻る