Databricks機械学習におけるデータの準備

[Load data \| Databricks on AWS](https://docs.databricks.com/applications/machine-learning/load-data/index.html) [2021/6/11時点]と[Preprocess data \| Databricks on AWS](https://docs.databricks.com/applications/machine-learning/preprocess-data/index.html) [2021/9/7時点]の翻訳です。

本書では、特にML、DL向けのデータ準備をカバーした情報とサンプルを提供します。

# データのロード

このセクションでは、特にML、DLアプリケーションにおけるデータのロードについて説明します。データロードに関する一般的な情報については、[Data guide](https://docs.databricks.com/data/index.html)をご覧ください。

## データロードとモデルのチェックポイントのためのデータの格納

機械学習アプリケーションは、データロードとモデルのチェックポイントのために共有ストレージを必要とするケースがあります。これは特に分散ディープラーニングにおいて重要となります。Databricksは、クラスターがSpark API、ローカルファイルAPIを用いてデータにアクセスできるように[Databricksファイルシステム(DBFS)](https://qiita.com/taka_yayoi/items/e16c7272a7feb5ec9a92)を提供しています。

- [Databricks機械学習ランタイム6.3(6.3自体はサポート外)](https://docs.databricks.com/release-notes/runtime/6.3ml.html)以降: Databricksは[高性能のFUSEマウント](https://docs.databricks.com/data/databricks-file-system.html#fuse)を提供します。
- Databricks機械学習ランタイム5.5 LTS(Long Term Support): ディープラーニングおI/Oにおいて高パフォーマンスを提供する特殊なフォルダー`dbfs:/ml`を提供しており、これはドライバー、ワーカーノードの`file:/dbfs/ml`にマッピングされます。データを`/dbfs/ml`に保存することをお勧めします。このFUSEマウントは、2GB以下のファイルのみをサポートしているDatabricksランタイムの[ローカルファイルI/O APIの制限](https://docs.databricks.com/data/databricks-file-system.html#local-limitations)を軽減します。

## 表形式データのロード

[テーブル](https://qiita.com/taka_yayoi/items/e7f6982dfbee7fc84894)、あるいはファイル(例えば[CSVファイル](https://docs.databricks.com/data/data-sources/read-csv.html))から表形式の機械学習データをロードすることができます。[PySparkのメソッド](https://spark.apache.org/docs/latest/api/python/reference/api/pyspark.sql.DataFrame.toPandas.html?highlight=topandas#pyspark-sql-dataframe-topandas)の`toPandas()`を用いることで、Apache Sparkデータフレームをpandasのデータフレームに変換することができ、必要に応じて、[pandasメソッド](https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.to_numpy.html)の`to_numpy()`を用いてNumPyフォーマットに変換することができます。

## 分散トレーニングに向けたデータの準備

ここでは分散トレーニング向けにデータを準備する2つの方法、PetastormとTFRecordsをカバーします。

- [Prepare data for distributed training](https://docs.databricks.com/applications/machine-learning/load-data/ddl-data.html)
    - [Petastorm \(Recommended\)](https://docs.databricks.com/applications/machine-learning/load-data/ddl-data.html#petastorm-recommended)
    - [TFRecord](https://docs.databricks.com/applications/machine-learning/load-data/ddl-data.html#tfrecord)

# データの前処理

[Databricksの特徴量ストア](https://qiita.com/taka_yayoi/items/88ddec323537febf7784)を活用することで、新規に特徴量を作成し、既存の特徴量の探索、再利用、機械学習モデルのトレーニング、スコアリングのための特徴量の取得、そして、リアルタイム推論で必要となる低レーテンシーのオンラインストアに特徴量を公開することができます。

大規模データセットにおいては、特徴量エンジニアリングにSpark SQLとMLlibを活用することができます。Databricks機械学習ランタイムに含まれるscikit-learnのようなサードパーティライブラリもまた、有用なヘルパーメソッドを提供します。例えば、以下のscikit-learnやMLlibによる機械学習ノートブックをご覧ください。

- [scikit-learnによる特徴量エンジニアリング](https://github.com/taka-yayoi/public_repo/tree/main/mlflow_end_to_end)
- [Feature engineering with MLlib](https://docs.databricks.com/applications/machine-learning/preprocess-data/mllib.html)

より複雑なディープライーニングの特徴量処理に関しては、以下のノートブックでどのように特徴量作成に転移学習を使うのかを説明しています。

- [Featurization for transfer learning](https://docs.databricks.com/applications/machine-learning/preprocess-data/transfer-learning-tensorflow.html)

### Databricks 無料トライアル

[Databricks 無料トライアル](https://databricks.com/jp/try-databricks)