2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

S3に格納されているCSVファイルのDatabricksへの取り込み

Posted at

簡単そうに見えなくもないですが、いくつか選択肢があるのでそれぞれの良し悪し含めてウォークスルーしていきます。

マニュアルはこちらですが、それほど親切ではありません(すみません、あとで修正します)。

以下の2つの観点で選択肢を検討する必要があります。

  • DatabricksからS3へのアクセス方法
  • S3からDatabricksへの取り込み

S3の準備

AWSのコンソールからS3バケットを作成します。ここではtaka-uc-external-location-bucketという名前にしています。
Screenshot 2024-05-14 at 20.17.56.png

適当なCSVファイルをアップロードしておきます。
Screenshot 2024-05-14 at 20.32.56.png

DatabricksからS3へのアクセス

Databricksから既存のS3バケットにアクセスするには以下の設定が必要です。

  • ストレージ認証情報: DatabricksからS3へのアクセスを許可するIAMロールをラッピングするオブジェクトです。
  • 外部ロケーション: アクセスを許可するS3のパスと上記のストレージ認証情報をラッピングするオブジェクトです。

そして、アクセスの方法としては上記の外部ロケーション経由でアクセスするか、ボリュームとして設定してアクセスするかの選択肢があります。

外部ロケーションの作成

まずは、外部ロケーションから作成します。

Databricksカタログエクスプローラでの作業

カタログエクスプローラの外部データ > 外部ロケーションにアクセスし、右上のロケーションを作成をクリックします。
Screenshot 2024-05-14 at 20.35.31.png

AWSクイックスタートを選択して、次のページをクリックします。
Screenshot 2024-05-14 at 20.35.42.png

注意
AWSクイックスタートの方法の場合には、ストレージ認証情報の作成をスキップできます。手動の場合は、ご自身でストレージ認証情報を作成する必要があります。

バケット名にs3://taka-uc-external-location-bucketを指定して、下にある新規トークンを生成をクリックします。
Screenshot 2024-05-14 at 20.38.25.png

表示されるパーソナルアクセストークンをコピーしておきます。この後のCloudFormationテンプレートで指定します。

警告

  • パーソナルアクセストークンは厳重に管理してください。
  • このパーソナルアクセストークンは60分で無効になるので、それまでに次のステップを完了してください。

クイックスタートで開始をクリックします。

AWSコンソールでの作業

AWSコンソールにログインしていない場合にはログインします。
Screenshot 2024-05-14 at 20.42.07.png

CloudFormationのテンプレートが表示されます。
Screenshot 2024-05-14 at 20.43.24.png

Databricks Personal Access Tokenに上のステップでコピーしたパーソナルアクセストークンを貼り付けます。
Screenshot 2024-05-14 at 20.44.37.png
Screenshot 2024-05-14 at 20.46.17.png

機能の部分のチェックをつけて、スタックの作成をクリックするとスタックの構築がスタートします。
Screenshot 2024-05-14 at 20.47.50.png

CREATE_COMPLETEになるまで待ちます。
Screenshot 2024-05-14 at 20.50.05.png

Databricksカタログエクスプローラでの動作確認

CREATE_COMPLETEになったら、Databricksのカタログエクスプローラに戻ってOKをクリックします。
Screenshot 2024-05-14 at 20.50.39.png

これで外部ロケーションが作成されました。
Screenshot 2024-05-14 at 20.51.49.png

接続のテストをクリックします。
Screenshot 2024-05-14 at 20.53.48.png

テストが通過したらOKです。
Screenshot 2024-05-14 at 20.54.30.png

閲覧タブでもCSVファイルを確認できるはずです。
Screenshot 2024-05-14 at 20.55.58.png

この時点でもノートブックからCSVにアクセスすることは可能です。

df = spark.read.csv("s3://taka-uc-external-location-bucket/data/japan_cases_20220818.csv", header=True)
display(df)

Screenshot 2024-05-14 at 21.04.22.png

ただ、外部ロケーションの場合、s3://のプレフィクスを用いてアクセスするので、pandasやシェルからはアクセスできません。そこでボリュームの出番です。外部ロケーションを外部ボリュームとして設定することで、以下のようなメリットを享受できます。

  • 言語やAPIを問わずに統一されたパスでファイルにアクセスできるようになります。
  • カタログエクスプローラのUIから簡単にファイルを追加することができます。
  • ファイルの格納場所をUnity Catalogのカタログ、スキーマの枠組みで整理できます。

ボリュームの作成

カタログエクスプローラで適当なカタログ、スキーマを選択します。右上の作成 > ボリュームを作成をクリックします。
Screenshot 2024-05-14 at 21.06.59.png

ボリュームの名称を入力し、外部ボリュームを選択します。
Screenshot 2024-05-14 at 21.08.49.png

上のステップで作成した外部ロケーションを選択します。
Screenshot 2024-05-14 at 21.10.16.png

作成をクリックします。これで外部ボリュームが作成されました。なお、ボリュームには/Volumes/<カタログ名>/<スキーマ(データベース)名>/<ボリューム名>/というパスでアクセスできます。
Screenshot 2024-05-14 at 21.11.00.png

CSVファイルも確認できます。
Screenshot 2024-05-14 at 21.11.27.png

カタログエクスプローラからファイルの追加も可能です。
Screenshot 2024-05-14 at 21.13.04.png

追加されたファイルはAWSのコンソールでも確認できます。
Screenshot 2024-05-14 at 21.13.55.png

S3からDatabricksへの取り込み

ここまでのステップで、DatabricksからCSVを格納しているS3にボリューム経由でアクセスできるようになりました。

df = spark.read.csv("/Volumes/main/ingested_s3/csv_volume/data/japan_cases_20220818.csv", header=True)
display(df)

Screenshot 2024-05-14 at 21.15.52.png

しかし、この状態では常にパスを意識する必要がありますし、SQLを使うのも困難です。おすすめはカタログにテーブルとして登録するというものになります。これによって、リネージ、行列レベルのアクセス権、モニタリングなどのUnity Catalogの様々な機能を活用できるようになります。

df = spark.read.csv("/Volumes/main/ingested_s3/csv_volume/data/japan_cases_20220818.csv", header=True)
df.write.saveAsTable("main.ingested_s3.covid_data")

これでカタログにテーブルが登録されましたので、SQLでも容易にアクセスできるようになります。
Screenshot 2024-05-14 at 21.29.08.png

df = spark.sql("SELECT * FROM main.ingested_s3.covid_data")
display(df)
%sql
SELECT * FROM main.ingested_s3.covid_data

Screenshot 2024-05-14 at 21.32.42.png

まとめ

観点 おすすめ
DatabricksからS3へのアクセス方法 ボリューム経由でのアクセス
S3からDatabricksへの取り込み カタログ配下のテーブルとして取り込み

ご活用ください!

はじめてのDatabricks

はじめてのDatabricks

Databricks無料トライアル

Databricks無料トライアル

2
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?