DatabricksテーブルデータのCSVダウンロード

Databricksで管理されているテーブルをcsvファイルとしてダウンロードするには、いくつかのアプローチがあります。手軽なのは[SQLエディタからダウンロード](#sqlエディタからダウンロード)ですが、ファイルサイズが大きい場合は[ボリュームを用いたダウンロード](#ボリュームを用いたダウンロード)を実施してください。

# SQLエディタからダウンロード

こちらの手順です。

https://docs.databricks.com/ja/sql/user/sql-editor/index.html#edit-download-or-add-to-a-dashboard

:::note info
**制限**
- 最大約 1 GB の結果データを CSV および TSV 形式でダウンロードし、最大 100,000 行を Excel ファイルにダウンロードできます。
- 1 GB の制限は、最終的なファイルのダウンロードよりも前のステップに適用されるため、最終的なファイルのダウンロード サイズは 1 GB よりわずかに多い場合もあれば小さい場合もあります。
- ダウンロードできない場合は、ワークスペース管理者がワークスペースにおけるダウンロード機能を無効にしています。管理者にお問い合わせください。
:::

カタログエクスプローラでダウンロードしたいテーブルにアクセスします。

![Screenshot 2024-10-17 at 9.33.01.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1168882/51ae7142-50d3-b670-fc51-7633dc059523.png)

右上の**作成 > クエリー**をクリックします。

![Screenshot 2024-10-17 at 9.33.12.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1168882/3707dee8-5968-60df-d36d-0d7cf696dfe0.png)

テーブルのデータを取得するSQLが表示されます。

![Screenshot 2024-10-17 at 9.39.41.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1168882/326f3853-5db0-9a2f-cc20-02aefea9025e.png)

この時点では、1000行しか取得されていません。**実行**ボタンの右にある下向き矢印をクリックし、**LIMIT 1000**のチェックを外します。

![Screenshot 2024-10-17 at 9.38.13.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1168882/c39d8055-c9c3-2e22-9251-7b76b44e551e.png)
![Screenshot 2024-10-17 at 9.39.06.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1168882/2d74e5bc-8d6d-db9d-dd6b-5f8d3b37e7b8.png)

再度**実行**ボタンをクリックします。今度は全件が取得されています。

![Screenshot 2024-10-17 at 9.40.48.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1168882/4979d46e-aa13-d594-7e93-a2a7bbe7ef8e.png)

この結果をダウンロードするには、**未設定の結果**右にある下向き矢印をクリックします。

![Screenshot 2024-10-17 at 9.40.48.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1168882/9beccab5-db49-4c4e-e372-955a042caa6b.png)

ここでは、**CSVをダウンロード**を選択します。

![Screenshot 2024-10-17 at 9.41.56.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1168882/e5aace2c-74d3-fb29-7183-9c42eab678c5.png)

全データを含むCSVファイルがダウンロードされます。

![Screenshot 2024-10-17 at 9.43.07.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1168882/b34225e0-0995-ee4d-4295-0b8ad0853b88.png)
![Screenshot 2024-10-17 at 9.43.53.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1168882/64217e3c-fdb3-9285-57b7-2de1c4a97076.png)

# ボリュームを用いたダウンロード

上の制限に該当する大規模なファイルの場合、こちらのアプローチが必要となります。以下の手順を踏みます。

1. テーブルをSparkデータフレームに読み込み
1. Sparkデータフレームをpandasデータフレームに変換
1. pandasデータフレームをcsvファイルとしてボリュームに保存
1. csvファイルをダウンロード

ノートブックを作成し、クラスターにアタッチします。

以下を実行します。テーブルやボリュームのパスは適宜変更してください。

```py
# Spark DataFrameを読み込む
sdf = spark.table("users.takaaki_yayoi.covid_cases")
# Spark DataFrameをPandas DataFrameに変換
pdf = sdf.toPandas()
# Pandas DataFrameをCSVファイルとして保存
pdf.to_csv("/Volumes/users/takaaki_yayoi/data/covid_cases.csv")
```

ボリューム上にcsvファイルが作成されています。

![Screenshot 2024-10-17 at 9.53.10.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1168882/4a7d9afc-281e-24ee-c25f-d06bb63663ad.png)

ファイルの右にあるケバブメニューをクリックし、**ファイルをダウンロード**を選択します。

![Screenshot 2024-10-17 at 9.54.17.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1168882/c5db0320-f07b-01c0-fd91-35499bfa7ce5.png)

これで、csvファイルとしてダウンロードできます。

![Screenshot 2024-10-17 at 9.55.02.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1168882/d273bbf2-fdc3-c8d3-8a39-5586fe757e87.png)

## `toPandas`でエラーになってしまう場合

pandasデータフレームは全てをメモリに載せるので、メモリサイズを超えるデータをデータフレームにしようとするとエラーになります。その場合には、pandasデータフレームを使用せずSparkデータフレームからcsvに直接書き出します。しかし、Sparkデータフレームは分散ファイルシステムを前提としているので、そのまま書き出すとフォルダ配下に複数のファイルが作成されてしまいます。これを避けるために以下のコードを実行します。`coalesce`でパーティションを1にし、単一のcsvファイルが作成されるようにします。

```py
# Spark DataFrameを読み込む
sdf = spark.table("users.takaaki_yayoi.covid_cases")
# Spark DataFrameをCSVファイルとして保存
sdf.coalesce(1).write.mode("overwrite").option("header", "true").csv("/Volumes/users/takaaki_yayoi/data/covid_cases")
```

ボリュームには指定されたフォルダ配下にファイルが作成されています。`part-00000-`で始まるファイルがcsvファイルです。こちらをダウンロードします。

![Screenshot 2024-10-17 at 11.39.12.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1168882/5765785d-bb53-5a19-0707-2f2d97e2706d.png)

![Screenshot 2024-10-17 at 11.40.31.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1168882/f99d3e06-db1d-b128-8b8d-b7101dfa15a9.png)


### はじめてのDatabricks

[はじめてのDatabricks](https://qiita.com/taka_yayoi/items/8dc72d083edb879a5e5d)

### Databricks無料トライアル

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