DatabricksのWorkspace Filesを操作してみる

こちらのマニュアルのウォークスルーです。

https://qiita.com/taka_yayoi/items/14c74e07f41d4e93ee45

「ワークスペースのファイル」というと正直「何？」となると思います。一般名詞ではなくWorkspace FilesというDatabricksの機能の一つです。

DatabricksワークスペースとGitリポジトリを同期できる[Databricks Repos](https://qiita.com/taka_yayoi/items/b89f199ff0d3a4c16140)(Repositoryの複数形を略してReposです)という機能があるのですが、このRepo(リポジトリ)配下にはノートブック以外にもPythonスクリプトやCSVファイルを格納することができます。これらのファイルをワークスペースファイル(Workpsace File)と呼びます。

リポジトリに格納されているノートブックからこれらのファイルを操作することができます。

# データの準備

ワークスペースファイルとして操作するファイルを準備します。ここでは、[Databricksサンプルデータセット](https://qiita.com/taka_yayoi/items/dcf77d0b007fae774ce5)からファイルをコピーしてワークスペースファイルとします。

まず、リポジトリを作成してノートブックをリポジトリの中に作成します。ここでは、`workspace_files`というリポジトリをGitHubで作成し、連携しています。
![Screenshot 2023-01-29 at 17.58.56.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1168882/dfa05625-d109-a22a-76b0-d92d652f167c.png)
![Screenshot 2023-01-29 at 17.59.42.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1168882/32d2fedd-34a9-af23-cb2a-b71e57879e57.png)

リポジトリのノートブックからは、リポジトリにパス`/Workspace/Repos/<ユーザー名>/<リポジトリ名>`でアクセスすることができます。以下のコマンドを実行してリポジトリにファイルをコピーします。

```sh:Shell
%sh
cp /dbfs/databricks-datasets/wine-quality/winequality-red.csv /Workspace/Repos/takaaki.yayoi@databricks.com/workspace_files
```

すると、リポジトリ配下にCSVファイルが表示されます。
![Screenshot 2023-01-29 at 18.00.38.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1168882/3e69ed09-fed5-5125-6a37-7d1fda8f90ca.png)

なお、CSVファイルをクリックするとエディタに遷移します。
![Screenshot 2023-01-29 at 18.01.29.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1168882/39eace17-49e9-a3ab-572a-39d6a358c202.png)

# データの読み込み

リポジトリにあるファイルはリポジトリにあるノートブックから相対パス、絶対パスを指定して読み込むことができます。

```py:Python
import pandas as pd
df = pd.read_csv("./winequality-red.csv", sep=";")
df
```
![Screenshot 2023-01-29 at 18.04.40.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1168882/6a9296fc-913f-9fcc-7a6e-660095e811fa.png)

Sparkを用いて読み込むことも可能です。Sparkで読み込むにはファイルに対する完全修飾パスが必要なので、`os.getcwd()`を用いてカレントディレクトリを取得しています。

```py:Python
import os
sdf = spark.read.option("delimiter", ";").option("header", True).format("csv").load(f"file:{os.getcwd()}/winequality-red.csv", )
display(sdf)
```
![Screenshot 2023-01-29 at 18.07.23.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1168882/c0efd00a-9dde-4677-a843-9be29782c219.png)

# ディレクトリ・ファイルの操作

`os.mkdir`でリポジトリ内にディレクトリを作成することができます。

```py:Python
os.mkdir('dir1')
```
![Screenshot 2023-01-29 at 18.12.55.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1168882/0dcbf3c2-118c-5076-152b-32a7c13e3693.png)

テキストファイルを書き込みます。

```py:Python
with open('dir1/new_file.txt', "w") as f:
    f.write("new content")
```

ファイルが作成されます。
![Screenshot 2023-01-29 at 18.15.08.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1168882/a42a5d93-58c7-d57f-4c85-587dc03caeba.png)
![Screenshot 2023-01-29 at 18.15.27.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1168882/b847e0e0-45a3-3f20-d25a-e4642c75cd29.png)

追記もできます。

```py:Python
with open('dir1/new_file.txt', "a") as f:
    f.write(" continued")
```
![Screenshot 2023-01-29 at 18.16.17.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1168882/c8311b48-9231-bae7-5228-babffb007e2f.png)

ファイル・ディレクトリの削除も同様です。

```py:Python
os.remove('dir1/new_file.txt')
```

```py:Python
os.rmdir('dir1')
```

また、カスタムPythonモジュールのimportも可能です。Gitリポジトリと連携しながらファイルを柔軟に取り扱うことができるワークスペースファイル(Workspace Files)、ぜひご活用ください。

### Databricks 無料トライアル

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