メインコンテンツまでスキップ

ファイルタイプ

適用対象: 「はい」とマークされました。 Databricks Runtime 18 LTS 以降

備考

ベータ版

この機能はベータ版です。ワークスペース管理者は、 プレビュー ページからこの機能へのアクセスを制御できます。Databricksのプレビューを管理するを参照してください。

FileType は、SQL FILE 型に対応する PySpark 型であり、非構造化ファイルとそのメタデータへの参照です。これを使用して、Python ユーザー定義関数 (UDF) で FILE パラメーターと戻り値の型を宣言します。Python では、FILE 値は FileRef オブジェクトであり、ファイルのメタデータを保持し、そのバイトを読み取ります。

SQL 型のリファレンスと概念の概要については、FILE 型およびFILE 型と非構造化データを参照してください。ファイル処理 UDF の例については、UDF を使用したファイルの処理を参照してください。

注記

FILE タイプでは、サーバーレスノートブックで 環境バージョン 6 以降が必要です。ノートブックの環境バージョンを選択するには、ベース環境の選択を参照してください。

インポート​

Python
from pyspark.sql.types import FileType, FileRef

ファイルタイプ​

FileType pyspark.sql.types.DataType のサブクラスです。これを UDF のパラメーターまたは戻り値の型として、あるいはスキーマ内のフィールド型として使用します。

FileType MANAGED または EXTERNAL が指定されていません。これらの修飾子は FILE テーブルカラムにのみ適用されます。このカラムは、参照をマネージドとして保存するか外部として保存するかを決定します。UDF は FILE 参照を渡して返します。ターゲットカラムは、結果をテーブルに書き込む際に各参照をどのように保存するかを決定します。

FileType は以下の方法で使用できます。これは SQL および Scala UDF、ならびに SQL ストアドプロシージャにも適用されます。

  • 最上位の型として。
  • StructType または ArrayType の内部に入れ子になっています。
  • MapType の値タイプとして使用できますが、MapType キーとしては使用できません。
  • VariantType 内ですが、外部ファイルの場合に限ります。

クエリーが FILE 列を Python に返す場合(UDF 内、または DataFrame.collect() を介する場合のいずれであっても)、各値は FileRef となります。

FileRef​

FileRef は、FILE の Python 値です。これにはファイルのメタデータが保持されており、ファイルのバイトを読み取り、新しい参照を作成するためのメソッドがあります。

属性​

属性

Type

説明

uri

str

ファイルのURI。常に設定します。

offset

int

ファイル内のオフセット(バイト単位)。

size

int

ファイルのサイズ(バイト単位)。

content_type

str

既知の場合の、ファイルの MIME タイプ。

checksum

str

<algorithm>:<digest>形式の、ファイルのバイトに対する整合性トークン。認識されるアルゴリズムについては、チェックサムを参照してください。

属性

Type

説明

uri

str

ファイルのURI。常に設定します。

offset

int

ファイル内のオフセット(バイト単位)。

size

int

ファイルのサイズ(バイト単位)。

content_type

str

既知の場合の、ファイルの MIME タイプ。

checksum

str

<algorithm>:<digest>形式の、ファイルのバイトに対する整合性トークン。認識されるアルゴリズムについては、チェックサムを参照してください。

メソッド​

手法

説明

as_local_file()

ファイルへの pathlib.Path を返します。パスを受け入れる任意のライブラリに結果を渡します。Databricks コンピュート(ノートブックおよび UDF ワーカー)で使用できます。Databricks のコンピュート外でコードを実行する IDE やローカルアプリケーションなどの Databricks Connect クライアントでは使用できません。

open()

バイナリ読み取り用にファイルを開き、ファイルオブジェクトを返します。呼び出し元がそれを閉じます。as_local_file() と同じコンピュート要件があります。

from_bytes(content, path=None, content_type=None)

クラスメソッド。pathで指定されたUnity Catalogボリュームパスにcontent(bytes値)をuploadし、FileRefを返します。ターゲットパスにファイルが既に存在する場合は失敗します。UDF内でのみサポートされています。

from_local_file(local_file, path=None, content_type=None)

クラスメソッド。ローカルファイルを Unity Catalog ボリュームに upload し、FileRef を返します。path および content_type パラメーターは、from_bytes と同様に動作します。UDF 内でのみサポートされています。

手法

説明

as_local_file()

ファイルへの pathlib.Path を返します。パスを受け入れる任意のライブラリに結果を渡します。Databricks コンピュート(ノートブックおよび UDF ワーカー)で使用できます。Databricks のコンピュート外でコードを実行する IDE やローカルアプリケーションなどの Databricks Connect クライアントでは使用できません。

open()

バイナリ読み取り用にファイルを開き、ファイルオブジェクトを返します。呼び出し元がそれを閉じます。as_local_file() と同じコンピュート要件があります。

from_bytes(content, path=None, content_type=None)

クラスメソッド。pathで指定されたUnity Catalogボリュームパスにcontent(bytes値)をuploadし、FileRefを返します。ターゲットパスにファイルが既に存在する場合は失敗します。UDF内でのみサポートされています。

from_local_file(local_file, path=None, content_type=None)

クラスメソッド。ローカルファイルを Unity Catalog ボリュームに upload し、FileRef を返します。path および content_type パラメーターは、from_bytes と同様に動作します。UDF 内でのみサポートされています。

例​

以下のコードでは、スカラー UDF が FILE 値を FileRef として受け取り、画像を開いてその寸法を返します。

Python
from pyspark.sql.functions import col, udf
from pyspark.sql.types import FileRef, StringType
from PIL import Image

@udf(returnType=StringType())
def image_resolution(file: FileRef) -> str:
with Image.open(file.as_local_file()) as img:
return f"{img.width}x{img.height}"

spark.read.table("images").select(image_resolution(col("photo"))).display()

UDTF を使用したファイルの生成など、ファイル処理 UDF の詳細な例については、「Process files with UDFs」を参照してください。一般的なUDFの作成については、Pythonユーザー定義スカラー関数 (UDF) および Pythonユーザー定義テーブル関数 (UDTF)を参照してください。

制限事項​

PySpark で FileType を使用する場合、以下の制限があります。

  • PySpark は、FILE MANAGED または FILE EXTERNAL テーブル列の宣言や、ファイルのバルク取り込みをサポートしていません。これらの操作には SQL を使用してください。PySpark は、UDF およびファイル読み取りにおいて、FileType として FILE のみをサポートしています。
  • as_local_file() および open() はクラスター側のアクセスを必要とするため、Databricks Connect クライアントでは使用できません。代わりに、UDF 内またはクラスターコンピュート上でそれらを呼び出します。
  • from_bytes および from_local_file の場合、Python UDFはパスの拡張子から content_type を推論しますが、Scala UDFはファイルのマジックバイトから推論します。
  • FILE MANAGED 列に書き込む UDF から FileRef を返すことはサポートされていません。
  • Unity Catalog に登録されている UDF (CREATE FUNCTION) は、FILE のメタデータを読み取ることができますが、その内容を読み取ることはできず、ファイルを作成することもできません。セッションスコープの UDF を使用して、ファイルの内容 (open、as_local_file) を読み取るか、ファイルを作成 (from_bytes、from_local_file) します。

関連リソース​