notebookutils.fs には、Azure Data Lake Storage (ADLS) Gen2 や Azure Blob Storage など、さまざまなファイル システムを操作するためのユーティリティが用意されています。
Azure Data Lake Storage Gen2 および Azure Blob Storage へのアクセスを適切に構成するようにしてください。
次のコマンドを実行して、使用可能なメソッドの概要を取得します。
notebookutils.fs.help()
次の表に、使用可能なファイル システムメソッドの一覧を示します。
| メソッド | 署名 | 説明 |
|---|---|---|
ls |
ls(path: String): Array |
ディレクトリの内容を一覧表示します。 |
mkdirs |
mkdirs(path: String): Boolean |
指定されたディレクトリが存在しない場合は作成し、必要な親ディレクトリも作成します。 |
cp |
cp(src: String, dest: String, recurse: Boolean = false): Boolean |
場合によってはファイル システム間で、ファイルまたはディレクトリをコピーします。 |
fastcp |
fastcp(src: String, dest: String, recurse: Boolean = true, extraConfigs: Map = None): Boolean |
大きなデータ ボリュームでパフォーマンスを向上させるために、azcopy を使用してファイルまたはディレクトリをコピーします。 |
mv |
mv(src: String, dest: String, create_path: Boolean, overwrite: Boolean = false): Boolean |
場合によってはファイル システム間でファイルまたはディレクトリを移動します。 |
put |
put(file: String, content: String, overwrite: Boolean = false): Boolean |
指定した文字列を UTF-8 でエンコードしてファイルに書き込みます。 |
head |
head(file: String, max_bytes: int = 1024 * 100): String |
UTF-8 でエンコードされた文字列として、指定されたファイルの最初の max_bytes バイトまでを返します。 |
append |
append(file: String, content: String, createFileIfNotExists: Boolean = false): Boolean |
コンテンツをファイルに追加します。 |
rm |
rm(path: String, recurse: Boolean = false): Boolean |
ファイルまたはディレクトリを削除します。 |
exists |
exists(path: String): Boolean |
ファイルまたはディレクトリが存在するかどうかを確認します。 |
getProperties |
getProperties(path: String): Map |
指定されたパスのプロパティを取得します。 Python ノートブックでのみ使用できます (PySpark、Scala、または R ではサポートされていません)。 |
注
特に明記されていない限り、すべてのファイル システム メソッドは Python、PySpark、Scala、および R ノートブックで使用できます。 Scala は camelCase パラメーター名を使用します (たとえば、createPathではなくcreate_path、maxBytesではなくmax_bytes)。
マウント操作とマウント解除操作については、「 ファイルのマウントとマウント解除」を参照してください。
注
notebookutils.fsを使用する場合は、次の制約と考慮事項に留意してください。
-
パスの動作はノートブックの種類によって異なります。Spark ノートブックでは、相対パスは既定の Lakehouse ABFSS パスに解決されます。 Python ノートブックでは、相対パスはローカル ファイル システムの作業ディレクトリ (
/home/trusted-service-user/work) に解決されます。 -
同時書き込み制限:
notebookutils.fs.append()とnotebookutils.fs.put()は、アトミック性の保証がないため、同じファイルへの同時書き込みをサポートしていません。 -
追加ループ遅延: ループで
notebookutils.fs.append()を使用する場合は、データの整合性を保つために、書き込みの間に0.5~1秒のスリープを追加します。 -
OneLake ショートカットの制限: S3/GCS 型のショートカットの場合は、
cp()およびfastcp()操作に ABFS パスの代わりにマウントされたパスを使用します。 -
リージョン間の制限:
fastcp()では、リージョン間での OneLake でのファイルのコピーはサポートされません。cp()を代わりに使用します。 - ランタイム バージョン: NotebookUtils は、Spark 3.4 (ランタイム v1.2) 以降で動作するように設計されています。
-
Python ノートブックの
cp()動作: Python ノートブックでは、cp()はfastcp()と同じ azcopy ベースのメカニズムを内部的に使用するため、両方のメソッドが同じように動作します。
NotebookUtils でファイル システムを操作する方法は、Spark API と同じです。
notebookutils.fs.mkdirs()と Lakehouse の使用例を次に示します。
| 使用方法 | HDFS ルートからの相対パス | ABFS ファイル システムの絶対パス | ドライバー ノード内のローカル ファイル システムの絶対パス |
|---|---|---|---|
| 既定以外のレイクハウス | サポートしていません | notebookutils.fs.mkdirs("abfss://<container_name>@<storage_account_name>.dfs.core.windows.net/<new_dir>") |
notebookutils.fs.mkdirs("file:/<new_dir>") |
| 既定のレイクハウス | [ファイル] または [テーブル] の下のディレクトリ: notebookutils.fs.mkdirs("Files/<new_dir>") |
notebookutils.fs.mkdirs("abfss://<container_name>@<storage_account_name>.dfs.core.windows.net/<new_dir>") |
notebookutils.fs.mkdirs("file:/<new_dir>") |
既定の Lakehouse の場合、ファイル パスはノートブックにマウントされ、既定のファイル キャッシュ タイムアウトは 120 秒です。 これは、ファイルが Lakehouse から削除された場合でも、ノートブックのローカル一時フォルダーに 120 秒間キャッシュされることを意味します。 タイムアウト規則を変更する場合は、既定の Lakehouse ファイル パスのマウントを解除し、別の
fileCacheTimeout値で再度マウントできます。既定以外の Lakehouse 構成の場合は、Lakehouse パスのマウント中に適切な
fileCacheTimeoutパラメーターを設定できます。 タイムアウトを 0 に設定すると、最新のファイルがレイクハウス サーバーから確実にフェッチされます。
ファイルを一覧表示する
ディレクトリの内容を一覧表示するには、 notebookutils.fs.ls('Your directory path')を使用します。 例えば次が挙げられます。
notebookutils.fs.ls("Files/tmp") # Relative path works with different base paths depending on notebook type
notebookutils.fs.ls("abfss://<container_name>@<storage_account_name>.dfs.core.windows.net/<path>") # Absolute path using ABFS file system
notebookutils.fs.ls("file:/tmp") # Full path of the local file system of driver node
notebookutils.fs.ls() API は、ノートブックの種類に応じて、相対パスを使用する場合の動作が異なります。
Spark ノートブック内: 相対パスは、既定のレイクハウスの ABFSS パスを基準とします。 たとえば、
notebookutils.fs.ls("Files")は、既定の Lakehouse のFilesディレクトリをポイントします。例えば次が挙げられます。
notebookutils.fs.ls("Files/sample_datasets/public_holidays.parquet")Python ノートブックの場合: 相対パスはローカル ファイル システムの作業ディレクトリに対する相対パスであり、既定では
/home/trusted-service-user/work。 そのため、既定の Lakehouse のnotebookutils.fs.ls("/lakehouse/default/Files")ディレクトリにアクセスするには、相対パスFilesの代わりに完全パスを使用する必要があります。例えば次が挙げられます。
notebookutils.fs.ls("/lakehouse/default/Files/sample_datasets/public_holidays.parquet")
ファイルのプロパティを表示します
notebookutils.fs.ls()を使用して、ファイル名、ファイル パス、ファイル サイズ、項目がファイルとディレクトリのどちらであるかを調べます。
files = notebookutils.fs.ls('Your directory path')
for file in files:
print(file.name, file.isDir, file.isFile, file.path, file.size)
より読みやすい出力が必要な場合は、f 文字列を使用します。
files = notebookutils.fs.ls("Files/data")
for file in files:
print(f"Name: {file.name}, Size: {file.size}, IsDir: {file.isDir}, Path: {file.path}")
新しいディレクトリの作成
ディレクトリが存在しない場合は、必要な親ディレクトリを含めて作成します。
notebookutils.fs.mkdirs('new directory name')
notebookutils.fs.mkdirs("Files/<new_dir>") # Works with the default Lakehouse files using relative path
notebookutils.fs.mkdirs("abfss://<container_name>@<storage_account_name>.dfs.core.windows.net/<new_dir>") # Based on ABFS file system
notebookutils.fs.mkdirs("file:/<new_dir>") # Based on local file system of driver node
ファイルのコピー
ファイル システム間でファイルまたはディレクトリをコピーします。 ディレクトリを再帰的にコピーするように recurse=True を設定します。
notebookutils.fs.cp('source file or directory', 'destination file or directory', recurse=True)
注
Python ノートブックノート: Python ノートブックでは、 cp() は fastcp()と同じ azcopy ベースのメカニズムを内部的に使用するため、両方の方法で効率的なパフォーマンスが提供されます。
OneLake ショートカットの制限により、notebookutils.fs.cp()を使用して S3/GCS 型のショートカットからデータをコピーする必要がある場合は、abfss パスではなくマウントされたパスを使用することをお勧めします。
ヒント
操作が成功したかどうかを確認するには、常にブール値の戻り値を確認します。 コピー操作を開始する前に、 notebookutils.fs.exists() を使用してソース パスを確認します。
次の例は、既定の Lakehouse から ADLS Gen2 アカウントへのクロスストレージ コピーを示しています。
notebookutils.fs.cp(
"Files/local_data",
"abfss://<container>@<account>.dfs.core.windows.net/remote_data",
recurse=True
)
パフォーマンスの高いコピー ファイル
fastcpを使用すると、特に大きなデータ ボリュームで、より効率的なコピー操作を行うことができます。
recurse パラメーターの既定値は True です。
notebookutils.fs.fastcp('source file or directory', 'destination file or directory', recurse=True)
ヒント
大規模なデータ転送には、fastcp()の代わりにcp()を使用します。
fastcpメソッドでは、内部で azcopy を使用するため、一括ファイル操作のスループットが大幅に向上します。 Python ノートブックでは、 cp() と fastcp() の両方で同じ基になるメカニズムが使用されます。
以下の考慮事項に留意してください。
-
notebookutils.fs.fastcp()では、リージョン間での OneLake でのファイルのコピーはサポートされていません。 この場合は、代わりにnotebookutils.fs.cp()を使用できます。 -
OneLake ショートカットの制限により、
notebookutils.fs.fastcp()を使用して S3/GCS 型のショートカットからデータをコピーする必要がある場合は、abfss パスではなくマウントされたパスを使用することをお勧めします。
ファイル コンテンツのプレビュー
ファイルの最初の max_bytes バイトまで UTF-8 文字列として返します。
notebookutils.fs.head('file path', max_bytes)
ヒント
大きなファイルの場合は、メモリの問題を回避するために、適切なhead()値でmax_bytesを使用します。 既定値は 100 KB (1024 * 100) です。
次の例では、ファイルの最初の 1,000 バイトを読み取ります。
content = notebookutils.fs.head("Files/data/sample.txt", 1000)
print(content)
注
max_bytesの既定値は言語によって異なります。Python ノートブックと Scala ノートブックは102400 (100 KB) を使用し、R ノートブックでは 65535 (64 KB) を使用します。 Scala では、このパラメーターの名前は maxBytes です。
ファイルの移動
ファイル システム間でファイルまたはディレクトリを移動します。
notebookutils.fs.mv('source file or directory', 'destination directory', create_path=True, overwrite=True)
Important
create_path パラメーターの既定値は、ランタイムによって異なります。
-
Spark ノートブック (PySpark、Scala、R): 既定値は
False(Scala ではfalse、R ではFALSE)。 移動操作の前に親ディレクトリが存在する必要があります。 -
Python ノートブック: 既定では
True。 親ディレクトリが存在しない場合は、自動的に作成されます。
ランタイム間で一貫した動作を確保するには、コードで create_path パラメーターを明示的に設定します。 Scala では、このパラメーターの名前は createPath です。
より明確なコードが必要な場合は、名前付きパラメーターを使用します。
notebookutils.fs.mv("Files/source.csv", "Files/new_folder/dest.csv", create_path=True, overwrite=True)
ファイルを書き込む
UTF-8 文字列をファイルに書き込みます。
notebookutils.fs.put("file path", "content to write", True) # Set the last parameter as True to overwrite the file if it already exists
ファイルへのコンテンツの追加
UTF-8 文字列をファイルに追加します。
notebookutils.fs.append("file path", "content to append", True) # Set the last parameter as True to create the file if it doesn't exist
Important
notebookutils.fs.append() また、 notebookutils.fs.put() は、アトミック性の保証がないため、同じファイルへの同時書き込みをサポートしていません。
notebookutils.fs.append ループで for API を使用して同じファイルに書き込む場合は、定期的な書き込みの間に約 0.5 ~ 1 秒のsleepステートメントを追加します。 この推奨事項は、notebookutils.fs.append API の内部 flush 操作が非同期であるため、短い遅延がデータの整合性を確保するのに役立ちます。
import time
for i in range(100):
notebookutils.fs.append("Files/output/data.txt", f"Line {i}\n", True)
time.sleep(0.5) # Prevent data integrity issues
ファイルまたはディレクトリの削除
ファイルまたはディレクトリを削除します。 ディレクトリを再帰的に削除するには、 recurse=True を設定します。
notebookutils.fs.rm('file path', recurse=True)
ファイルまたはディレクトリが存在するかどうかを確認する
指定したパスにファイルまたはディレクトリが存在するかどうかを確認します。 パスが存在する場合は True を返します。それ以外の場合は、 Falseを返します。
notebookutils.fs.exists("Files/data/input.csv")
ヒント
エラーを防ぐためにファイル操作を実行する前に、 exists() を使用します。 たとえば、ソース ファイルをコピーまたは移動する前に、ソース ファイルが存在することを確認します。
if notebookutils.fs.exists("Files/data/input.csv"):
notebookutils.fs.cp("Files/data/input.csv", "Files/backup/input.csv")
print("File copied successfully.")
else:
print("Source file not found.")
ファイルのプロパティの取得
名前と値のペアのマップとしてパスのプロパティを取得します。 Azure Blob Storage パスでのみサポートされます。
注
getProperties メソッドは Python ノートブックでのみ使用できます。 Spark ノートブック (PySpark、Scala、または R) ではサポートされていません。
パラメーター:
| パラメーター | タイプ | 必須 | 説明 |
|---|---|---|---|
path |
糸 | はい | ファイルまたはディレクトリへの ABFS パス。 |
返します: ファイル サイズ、作成時刻、最終変更時刻、コンテンツ タイプなどのメタデータ プロパティを含むディクショナリ (マップ)。
properties = notebookutils.fs.getProperties("abfss://<container_name>@<storage_account_name>.dfs.core.windows.net/<path>")
print(properties)