Databricks Apache Sparkクイックスタート

> [Databricksクイックスタートガイド](https://qiita.com/taka_yayoi/items/125231c126a602693610)のコンテンツです。

[Get started with Apache Spark \| Databricks on AWS](https://docs.databricks.com/getting-started/spark/quick-start.html)[2021/3/17時点]の翻訳です。

このチュートリアルでは、あなたがApache Sparkをすぐに使い始められるお手伝いをします。簡単にキーとなるコンセプトを紹介した後で、すぐに最初のApache Sparkアプリケーションを書いてみます。他のチュートリアルモジュールでは、あなたの興味に応じてより理解を深めることができます。

このモジュールでは、以下のことを学びます：

- [キーとなるApache Sparkインタフェース](#sparkインタフェース)
- [Apache Sparkアプリケーションことはじめ](#apache-sparkアプリケーションことはじめ)
- [Databricksデータセットにアクセスする](#databricksデータセット)

# 要件

[ユーザー向けDatabricksスタートガイド](https://qiita.com/taka_yayoi/items/77aa10ebcad9d40cc49c)を修了してください。

# Sparkインタフェース

Apache Sparkには、理解する必要がある主要なインタフェースが3つあります： レジリエント分散データセット、データフレーム、データセットです。

- **レジリエント分散データセット**: 一番最初のApahce Sparkの抽象化レイヤーは、レジリエント分散データセット(RDD)でした。マシンの集合体(クラスター)に渡って配置される、1種類以上のデータオブジェクトのシーケンスに対するインタフェースです。
- **データフレーム**: Pythonの[pandas](https://pandas.pydata.org/)ライブラリや[R言語](https://www.r-project.org/)でおなじみのデータフレームのコンセプトに近しいものです。Dataframe APIは、Java、Python、R、Scalaで利用できます。
- **データセット**: データフレームとRDDを組み合わせたものです。データフレームの利便性を保ったまま、型インタフェースを提供します。データセットAPIは、JavaとScalaで利用できます。

多くのシナリオで、データフレーム、データセットに対して性能の最適化が行われているため、RDDを使うケースは多くありません。しかしながら、以下の理由からRDDの抽象化を理解することは重要です。

- Sparkが高速に動作し、データの証跡を得るために、RDDは基盤となるインフラストラクチャです。
- Sparkのより高度なコンポーネントを使う際に、RDDを使用する必要があるかもしれません。
- [Spark UI](https://qiita.com/taka_yayoi/items/991aae376c089df58504#apache-spark-ui%E3%81%A7%E3%81%AE%E3%82%AF%E3%83%A9%E3%82%B9%E3%82%BF%E3%83%BC%E6%83%85%E5%A0%B1%E3%81%AE%E5%8F%82%E7%85%A7)の可視化はRDDを参照しています。

Sparkアプリケーションを開発する際は、特に[Apache Sparkデータフレームチュートリアル](https://qiita.com/taka_yayoi/items/2a7e9bb792eba316de4b)と[Datasets tutorial(英語)](https://docs.databricks.com/getting-started/spark/datasets.html#spark-datasets)を参照することになります。

# Apache Sparkアプリケーションことはじめ

最初のSparkアプリケーションを書くためには、Databricksノートブックセルにコードを追加する必要があります。この例ではPythonを使用します。詳細に関しては、[Apache Spark Quick Start Guide](https://spark.apache.org/docs/latest/quick-start.html)を参照することもできます。

[Databricksファイルシステム](https://qiita.com/taka_yayoi/items/e16c7272a7feb5ec9a92)にあるフォルダーの中を表示するには、以下を実行します。

```py:Python
# Take a look at the file system
display(dbutils.fs.ls("/databricks-datasets/samples/docs/"))
```
![](https://docs.databricks.com/_images/dbfs-readme-sm.png)

次のコマンドでは、全てのノートブックで利用できる`SparkSession`である`spark`を利用します。`README.md`テキストファイルを読み込み、`textFile`というデータフレームを作成するには以下を実行します。

```py:Python
textFile = spark.read.text("/databricks-datasets/samples/docs/README.md")
```

テキストファイルの行数をカウントするには、データフレームに`count`アクションを適用します。

```py:Python
textFile.count()
```
![](https://docs.databricks.com/_images/databricks-guide-textfile-count-output.png)

ここで、一つのことに気が付いたかもしれません。テキストファイルを読み込んだ二番目のコマンドでは、何の結果も表示されなかったのに、`count`を実行した三番目のコマンドでは結果が表示されました。これは、前者は変換処理(transformation)であったのに対して、後者はアクション(action)であったためです。変換処理はレイジー(lazy)であり、アクションが実行された時に初めて実行されます。これにより、コマンドを順次実行するのに比べて、Sparkでは性能を最適化(例えば、ジョインを行う前にフィルタリングを行うなど)することができます。変換処理とアクションの完全な一覧に関しては、Apache Sparkプログラミングガイドの[Transformations](https://spark.apache.org/docs/latest/rdd-programming-guide.html#transformations)と[Actions](https://spark.apache.org/docs/latest/rdd-programming-guide.html#actions)を参照ください。

# Databricksデータセット

Databricksワークスペースには、Sparkを学習したり、アルゴリズムをテストする際に利用できる様々な[データセット](https://qiita.com/taka_yayoi/items/dcf77d0b007fae774ce5)が格納されています。クイックスタートガイドを通じて、これらのデータセットを見ることになるでしょう。このデータセットは`/databricks-datasets`に格納されています。

# ノートブック

サンプルノートブックはこちらとなります。

- [PythonによるSparkクイックスタート](https://github.com/taka-yayoi/public_repo/tree/main/spark_qs_python)
- [Quick Start Using Scala \- Databricks(英語)](https://docs.databricks.com/_static/notebooks/getting-started/quickstartusingscala.html)

### Databricks 無料トライアル

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