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

Spark API

Databricks 無料トライアル

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

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

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

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

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の主なデメリットは、文字列への型キャストが必要なことです。

関連資料

用語集に戻る