Databricksで管理されているテーブルをcsvファイルとしてダウンロードするには、いくつかのアプローチがあります。手軽なのはSQLエディタからダウンロードですが、ファイルサイズが大きい場合はボリュームを用いたダウンロードを実施してください。
SQLエディタからダウンロード
こちらの手順です。
制限
- 最大約 1 GB の結果データを CSV および TSV 形式でダウンロードし、最大 100,000 行を Excel ファイルにダウンロードできます。
- 1 GB の制限は、最終的なファイルのダウンロードよりも前のステップに適用されるため、最終的なファイルのダウンロード サイズは 1 GB よりわずかに多い場合もあれば小さい場合もあります。
- ダウンロードできない場合は、ワークスペース管理者がワークスペースにおけるダウンロード機能を無効にしています。管理者にお問い合わせください。
カタログエクスプローラでダウンロードしたいテーブルにアクセスします。
右上の作成 > クエリーをクリックします。
テーブルのデータを取得するSQLが表示されます。
この時点では、1000行しか取得されていません。実行ボタンの右にある下向き矢印をクリックし、LIMIT 1000のチェックを外します。
再度実行ボタンをクリックします。今度は全件が取得されています。
この結果をダウンロードするには、未設定の結果右にある下向き矢印をクリックします。
ここでは、CSVをダウンロードを選択します。
全データを含むCSVファイルがダウンロードされます。
ボリュームを用いたダウンロード
上の制限に該当する大規模なファイルの場合、こちらのアプローチが必要となります。以下の手順を踏みます。
- テーブルをSparkデータフレームに読み込み
- Sparkデータフレームをpandasデータフレームに変換
- pandasデータフレームをcsvファイルとしてボリュームに保存
- csvファイルをダウンロード
ノートブックを作成し、クラスターにアタッチします。
以下を実行します。テーブルやボリュームのパスは適宜変更してください。
# 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ファイルが作成されています。
ファイルの右にあるケバブメニューをクリックし、ファイルをダウンロードを選択します。
これで、csvファイルとしてダウンロードできます。
toPandas
でエラーになってしまう場合
pandasデータフレームは全てをメモリに載せるので、メモリサイズを超えるデータをデータフレームにしようとするとエラーになります。その場合には、pandasデータフレームを使用せずSparkデータフレームからcsvに直接書き出します。しかし、Sparkデータフレームは分散ファイルシステムを前提としているので、そのまま書き出すとフォルダ配下に複数のファイルが作成されてしまいます。これを避けるために以下のコードを実行します。coalesce
でパーティションを1にし、単一のcsvファイルが作成されるようにします。
# 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ファイルです。こちらをダウンロードします。