Can you use pandas on Databricks? | Databricks on AWS [2022/11/18時点]の翻訳です。
本書は抄訳であり内容の正確性を保証するものではありません。正確な内容に関しては原文を参照ください。
Databricksランタイムには、標準的なPythonパッケージの一つとしてpandasが含まれており、Databricksのノートブックやジョブでpandasデータフレームを作成、活用することができます。
Databricksランタイム10.0以降では、Pandas API on SparkがPySparkデータフレーム上における馴染み深いpandasコマンドを提供しています。また、pandasデータフレームとPySparkデータフレームの間で変換を行うことができます。
Apache Sparkには、PySparkデータフレームに直接pandasの変換処理を適用できるpandas function APIの形でPythonロジックを実行するArrow最適化処理が含まれています。また、Apache Sparkでは、Pythonで定義された任意のユーザー関数に対して同様のArrow最適化を活用するpandas UDFもサポートしています。
pandasはDatabricksのどこにデータを格納するのか?
Databricksのさまざまな場所にデータを格納するためにpandasを使用することができます。どこにデータを格納し、どこからデータをロードできるのかは、ワークスペース管理者による設定に依存します。
注意
クラウドオブジェクトストレージにプロダクションのデータを格納することをお勧めします。Working with data in Amazon S3をご覧ください。
Unity Catalogが有効化されたワークスペースをお使いの際には、外部ロケーションのクラウドストレージにアクセスすることができます。Unity Catalogにおける外部ロケーションとストレージ認証情報の管理をご覧ください。
センシティブな情報がないデータにクイックな探索を行うには、以下のサンプルの様に相対パスやDBFSを用いて安全にデータを保存することができます。
import pandas as pd
df = pd.DataFrame([["a", 1], ["b", 2], ["c", 3]])
df.to_csv("./relative_path_test.csv")
df.to_csv("/dbfs/dbfs_test.csv")
以下の様に、%fs
マジックコマンドを用いてDBFSに書き込まれたファイルを探索することができます。
%fs ls
相対パスに保存する際、ファイルの場所はコードを実行した場所に依存します。Databricksノートブックを使用している場合、データファイルはお使いのクラスターのドライバーにアタッチされたボリュームストレージに保存されます。この場所に格納されたデータは、クラスターが停止されると永久的に削除されます。任意ファイルのサポートが有効化されたDatabricks Reposを使用している場合には、データは現在のプロジェクトのルートに保存されます。いずれのケースでも、以下の様にカレントのルートディレクトリから簡単なbashオペレーションを実行できる%sh
マジックコマンドを用いて、書き込まれたファイルを探索することができます。
%sh ls
Databricksがどのように様々なファイルを保存するのかに関しては、How to work with files on Databricksをご覧ください。
Databricksではpandasを用いてどの様にデータをロードするのか?
Databricksでは、探索のためにワークスペースにデータをアップロードするために、数多くの選択肢を提供しています。pandaによるデータロードで望ましい方法は、データをどのようにワークスペースにロードするのかによって変化します。
ローカルマシン上にノートブックと一緒に小規模なデータファイルを格納していたのであれば、データとコードを一緒にReposにアップロードすることができます。データファイルをロードするために相対パスを使うことができます。
Databricksではデータロードに対する数多くのUIベースのオプションを提供しています。これらのオプションの多くは、あなたのデータをDetlaテーブルとして保存します。そして、SparkデータフレームにDeltaテーブルを読み込み、それをpandasデータフレームに変換することができます。
DBFSや相対パスを用いてデータファイルを保存している場合には、これらのデータファイルを再ロードするためにDBFSや相対パスを使用することができます。以下のコードではサンプルを示しています。
import pandas as pd
df = pd.read_csv("./relative_path_test.csv")
df = pd.read_csv("/dbfs/dbfs_test.csv")
プロダクションデータはクラウドオブジェクトストレージに保存することをお勧めします。Working with data in Amazon S3をご覧ください。
Unity Catalogが有効化されたワークスペースをお使いの場合は、外部ロケーションに設定されたクラウドストレージにアクセスすることができます。Unity Catalogにおける外部ロケーションとストレージ認証情報の管理をご覧ください。
pandasと完全修飾のURLを用いることで、S3から直接データをロードすることができます。クラウドのデータにアクセスするためにクラウドの認証情報を指定する必要があります。
df = pd.read_csv(
f"s3://{bucket_name}/{file_path}",
storage_options={
"key": aws_access_key_id,
"secret": aws_secret_access_key,
"token": aws_session_token
}
)