Databricksにおけるsparklyr

[sparklyr \| Databricks on AWS](https://docs.databricks.com/spark/latest/sparkr/sparklyr.html) [2021/9/14時点]の翻訳です。

:::note warn
本書は抄訳であり内容の正確性を保証するものではありません。正確な内容に関しては原文を参照ください。
:::

Databricksではノートブック、ジョブ、RStudioデスクトップ上での[sparklyr](https://spark.rstudio.com/)の使用をサポートしています。

# 要件

Databricksでは、毎回のランタイムリリースに最新の安定バージョンのsparklyrを含めています。インストールされているsparklyrをインポートすることで、Databricks RノートブックやDatabricksでホスティングするRStudioサーバー内でsparklyrを使用することができます。

RStudioデスクトップでは、Databricks Connectを用いることでローカルマシンからsparklyr経由でDatabricksクラスターに接続し、Apache Sparkコードを実行することができます。[sparklyrおよびRStudio Desktop](https://qiita.com/taka_yayoi/items/a9781c0a871a5a4fcf2e#sparklyr%E3%81%8A%E3%82%88%E3%81%B3rstudio-desktop)をご覧ください。

# sparklyrからDatabricksクラスターに接続する

sparklyrの接続を確立するには、`spark_connect()`における接続方法で`"databricks"`を使用します。`spark_connect()`の他のパラメーターを指定する必要はなく、DatabricksクラスターにはSparkがインストール済みなので`spark_install()`を呼び出す必要もありません。

```r:R
# create a sparklyr connection
sc <- spark_connect(method = "databricks")
```

# sparklyrにおけるプログレスバーとSpark UI

上の例のように変数`sc`にsparklyrのコネクションオブジェクトを割り当てると、Sparkジョブを起動するそれぞれのコマンドの後にSparkのプログレスバーが表示されます。さらに、特定のSparkジョブに関連づけられるSpark UIを参照するためにプログレスバーの隣のリンクをクリックすることもできます。
![](https://docs.databricks.com/_images/sparklyr-progress.png)

# sparklyrの使用

sparklyrをインストールして接続を確立した後は、通常と同様に他の全ての[sparklyr API](https://spark.rstudio.com/reference/index.html)が動作します。サンプルに関しては以下の[ノートブック](#sparklyrノートブック)を参照ください。

通常sparklyrは[dplyr](https://cran.rstudio.com/web/packages/dplyr/vignettes/dplyr.html)のような他の[tidyverseパッケージ](https://www.tidyverse.org/)とともに使用されます。すぐに利用できるようにこれらのパッケージの大部分はDatabricksにインストールされています。シンプルにこれらをインポートし、APIを使い始めることができます。

# sparklyrとSparkRを同時に使用する

単一のノートブックやジョブでSparkRとsparklyrを使用することができます。SparkRとsparklyrをインポートし、それらの機能を活用することができます。Databricksノートブックでは、SparkRの接続は事前に設定されています。

SparkRのいくつかの関数は、dplyrの多くの関数をマスクします。

```r:R
> library(SparkR)
The following objects are masked from ‘package:dplyr’:

arrange, between, coalesce, collect, contains, count, cume_dist,
dense_rank, desc, distinct, explain, filter, first, group_by,
intersect, lag, last, lead, mutate, n, n_distinct, ntile,
percent_rank, rename, row_number, sample_frac, select, sql,
summarize, union
```

dplyrをインポートした後にSparkRをインポートした場合、`dplyr::arrange()`のように完全修飾名を用いることでdplyrの関数を参照することができます。同様に、SparkRの後にdplyrをインポートした場合には、dplyrによってSparkRの関数がマスクされます。

あるいは、不要な際には2つのパッケージのいずれかを選択的にデタッチすることができます。

```r:R
detach("package:dplyr")
```

# spark-submitジョブでsparklyrを使う

少々のコード変更で、spark-submitジョブとしてsparklyrを使用するスクリプトをDatabricks上で実行することができます。上述した手順のいくつかはDatabricks上のspark-submitジョブでsparklyrを使用する際には適用されません。特に、`spark_connect`にはSparkのマスターURLを指定しなくてはなりません。[Create and run a spark\-submit job for R scripts](https://docs.databricks.com/dev-tools/api/latest/examples.html#spark-submit-api-example-r)をご覧ください。

# 未サポートの機能

Databricksではローカルのブラウザを必要とする`spark_web()`や`spark_log()`のようなsparklyrのメソッドはサポートしていません。しかし、Spark UIはDatabricksにビルトインされているので、簡単にSparkジョブを調査することができます。[クラスターのドライバーノード、ワーカーノードのログ](https://qiita.com/taka_yayoi/items/991aae376c089df58504#%E3%82%AF%E3%83%A9%E3%82%B9%E3%82%BF%E3%83%BC%E3%81%AE%E3%83%89%E3%83%A9%E3%82%A4%E3%83%90%E3%83%BC%E3%83%8E%E3%83%BC%E3%83%89%E3%83%AF%E3%83%BC%E3%82%AB%E3%83%BC%E3%83%8E%E3%83%BC%E3%83%89%E3%81%AE%E3%83%AD%E3%82%B0)をご覧ください。

:::note info
**訳者注**
2022/7/13時点では、sparklyrで得られるデータフレームに対して`display`関数が適切に動作しません。
:::

# sparklyrノートブック

https://docs.databricks.com/_static/notebooks/sparklyr.html

### Databricks 無料トライアル

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