Spark API
Databricks 無料トライアル
Sparkには、DataFrame、Dataset、RDDの3つのAPIがあります。
レジリエントな分散データセット(RDD)とは
レジリエントな分散データセット(RDD)は、分散コンピューティングを用いたレコードコレクションです。フォールトトレラントで不変な性質を有しています。RDDは、低レベルAPIとの並列操作が可能で、遅延機能によりSparkの操作を迅速化します。また、RDDは2つの操作を サポートしています。
- トランスフォーメーション —別の RDD を返す遅延操作。この RDD はアクションが実行されない限り計算されません。(map()、flatmap()、filter()など)
- アクション—-計算をトリガーし、値を返す操作。(count、 top()、 savetofile()など)
RDDのデメリット
RDDを使用する場合、それぞれのRDDを最適化する必要があります。さらに、DatasetやDataFrakeとは異なり、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の主なデメリットは、文字列への型キャストが必要なことです。