ローカルマシンからDatabricksにデータをアップロードして読み込む

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

自分で振り返ってみても、Databricksを学び始めた頃「ローカルマシンからデータをDatabricksにアップロードして、読み込む時ってどうするんだっけ？」となっていたので、手順をまとめました。

こちらでは、以下のデータをローカルにダウンロードし、Databricksにアップロードする流れを説明します。

[国勢調査 時系列データ CSV形式による主要時系列データ \| ファイル \| 統計データを探す \| 政府統計の総合窓口](https://www.e-stat.go.jp/stat-search/files?page=1&layout=datalist&toukei=00200521&tstat=000001011777&cycle=0&tclass1=000001094741&tclass2val=0)

# データのダウンロード

以下のリンクをクリックすると、CSVファイル`c01.csv`がローカルマシンにダウンロードされます。こちらのデータは都道府県別の年ごとの人口推移となっています。

<a href="https://www.e-stat.go.jp/stat-search/file-download?statInfId=000031524010&fileKind=1" target="_blank">CSVのダウンロード<a>

# Databricksにおけるデータの格納場所

Databricksをデプロイする際にS3の設定を行なっており、Databricksで使用するデータはこちらのS3バケットに格納されます。DatabricksからS3のデータにアクセスする際には、**Databricksファイルシステム(DBFS)** 経由でアクセスすることになります。DBFSを利用することで、S3のURLなどを意識することなしに、フォルダー、ファイルの概念でファイルを操作することができます。

![](https://camo.qiitausercontent.com/226e804c772f45d7267917336e094f914af63371/68747470733a2f2f71696974612d696d6167652d73746f72652e73332e61702d6e6f727468656173742d312e616d617a6f6e6177732e636f6d2f302f313136383838322f63303064663339632d643864622d333862642d386532632d3438666533376635353636372e706e67)

:::note info
**DBFSのアクセス権に関する重要な情報**
[DBFSルート](https://qiita.com/taka_yayoi/items/897264c486e179d72247#dbfs%E3%83%AB%E3%83%BC%E3%83%88)を除き、DBFSにマウントされたオブジェクトストレージのオブジェクトに対してすべてのユーザーが読み書きのアクセス権を持ちます。

しかし、インスタンスプロファイルを用いてマウントが作成されている場合、IAMロールが許可するユーザーのみがアクセス権を持ち、当該インスタンスプロファイルを使用するように設定されたクラスターのみがアクセスすることができます。このため、インスタンスプロファイルを用いて作成されたマウントにはDBFS CLIでアクセスすることはできません。

インスタンスプロファイルを用いたS3バケットのマウントに関しては、[DBFSを通じたS3バケットへのアクセス](https://qiita.com/taka_yayoi/items/a26a1fb49c0e217ad10b#dbfs%E3%82%92%E9%80%9A%E3%81%98%E3%81%9Fs3%E3%83%90%E3%82%B1%E3%83%83%E3%83%88%E3%81%B8%E3%81%AE%E3%82%A2%E3%82%AF%E3%82%BB%E3%82%B9)をご覧ください。
:::

**参考資料**
- [Databricksのアーキテクチャ](https://qiita.com/taka_yayoi/items/7d209bc8d32bc5f2dba4)
- [Databricksにおけるファイルシステム](https://qiita.com/taka_yayoi/items/e16c7272a7feb5ec9a92)

# データのアップロード

手元のマシンにある小規模なデータをDatabricksで分析したい場合には、UIを用いてDBFSにデータをインポートすることができます。

:::note info
**注意**
以下の手順2で**DBFS**が表示されない場合、以下の手順でDBFSブラウザーを有効化してください。

1. 管理者ユーザーでDatabricksにログインし、サイドメニューの**設定 > 管理コンソール(Admin console)** を選択します。
![Screen Shot 2022-05-25 at 18.10.28.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1168882/d17938f6-d4ac-5c71-05c7-0a017e2cdbb1.png)
1. **Workspace settings**タブを開きます。
![Screen Shot 2022-05-25 at 18.10.40.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1168882/2afeb627-d442-ab7a-be20-dc6f79d10e54.png)
1. Advancedセクションにある**DBFS File Browser**の右のスイッチを切り替えて**Enabled**になることを確認します。
![Screen Shot 2022-05-25 at 18.10.54.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1168882/747ae3b0-2fa9-7a58-e13d-57a77b50e0cd.png) 
:::

1. 画面左の![](https://camo.qiitausercontent.com/6c716128b2bae5a34a95fe25490a02228f9448de/68747470733a2f2f71696974612d696d6167652d73746f72652e73332e61702d6e6f727468656173742d312e616d617a6f6e6177732e636f6d2f302f313136383838322f39383432616166662d306433662d373366622d366264302d6166363164346464303666362e706e67)をクリックします。
1. 画面上部の**DBFS**をクリックし、DBFSのブラウザーに切り替えます。
1. 画面上に表示される**アップロード**ボタンをクリックします。
![Screen Shot 2022-05-25 at 16.06.18.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1168882/52c0dd71-1013-c4c9-03c9-4fe9c6172d53.png)
1. アップロード用のダイアログが表示されます。アップロード先のパスを指定して、ファイルをドラッグアンドドロップする流れとなります。
![Screen Shot 2022-05-25 at 16.07.12.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1168882/838638d6-b651-675f-ed58-6c8539aef97c.png)
    - **選択**ボタンをクリックすると、フォルダーブラウザが開くのでアップロードしたいフォルダーを選択します。あるいはパスを入力します。
1. **ファイル**のボックスに、[データのダウンロード](#データのダウンロード)でダウンロードしたCSVファイルをドラッグアンドドロップします。あるいは、ボックスをクリックしてファイル選択ダイアログを開いてファイルを選択します。
![Screen Shot 2022-05-25 at 16.19.22.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1168882/6a12fbc3-41ce-7833-75a8-cfe2777852e5.png)
1. DBFSブラウザを参照して、ファイルがアップロードされたことを確認します。
![Screen Shot 2022-05-25 at 16.22.49.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1168882/dcb899d0-8317-eb7a-ab0f-600dfa14ad63.png)
1. ファイル名の右にある▼をクリックするとメニューが表示されるので、**パスをコピー**をクリックします。
![Screen Shot 2022-05-25 at 16.24.08.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1168882/4971bdcc-5653-bbee-686e-a74e6ad44736.png)
1. ファイルのパスが表示されます。ここでは、**Spark API形式**の方の**コピー**をクリックして、パスをコピーしておきます。ここでは二つの形式の違いは説明しませんが、興味のある方は[こちら](https://qiita.com/taka_yayoi/items/897264c486e179d72247#%E3%82%B5%E3%83%9E%E3%83%AA%E3%83%BC%E3%81%AE%E3%83%86%E3%83%BC%E3%83%96%E3%83%AB%E5%8F%8A%E3%81%B3%E5%9B%B3)を参照してください。
![Screen Shot 2022-05-25 at 16.26.17.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1168882/5092ab37-0ec9-e4a5-5a41-46612755ffe8.png)

:::note
**ティップス**
ノートブックのメニューからもデータをアップロードすることができます。

1. ノートブックを開き、上部のメニューから**ファイル > データをアップロード**を選択します
![Screen Shot 2022-05-25 at 18.18.51.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1168882/e440611d-f6d1-33c6-e0ab-46256fb0403a.png)
1. ダイアログが表示されるので、アップロード先とファイルを選択します。
![Screen Shot 2022-05-25 at 18.19.07.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1168882/bb10ee0b-1ed3-902a-d1ba-3689d81a0dc1.png)
:::


**参考資料**
- [Databricksにおけるデータのインポート、読み込み、変更](https://qiita.com/taka_yayoi/items/4fa98b343a91b8eaa480)
- [UIからDBFSにアクセス](https://qiita.com/taka_yayoi/items/e16c7272a7feb5ec9a92#ui%E3%81%8B%E3%82%89dbfs%E3%81%AB%E3%82%A2%E3%82%AF%E3%82%BB%E3%82%B9)



# データの読み込み

上のステップを経て、データをDatabricksにアップロードしたので、Databricksノートブックで読み込みます。アップロードしたファイルの文字コードがshift-jisなの文字レコードセットを指定しています。

:::note info
**注意**
以下の`file_path`の値を上のステップでコピーしたパスで置き換えてください。
:::

```py:Python
file_path = "dbfs:/FileStore/shared_uploads/takaaki.yayoi@databricks.com/c01.csv"
df = spark.read.option("header", True).option('charset', 'shift-jis').csv(file_path)
```

```py:Python
# データフレームの表示
display(df)
```

![Screen Shot 2022-05-25 at 16.47.13.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1168882/fb9082d9-856a-ae10-74d4-083e394e1355.png)

これでデータを読み込めましたので、いろいろな分析にトライしてみてください！


### Databricks 無料トライアル

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