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

バイナリファイルを読み込む

Databricksは、バイナリファイルを読み込み、各ファイルを、ファイルの生のコンテンツとメタデータを含む単一のレコードに変換するバイナリファイルデータソースをサポートしています。画像、音声、PDFファイルなどの非構造化データは、後続処理や機械学習推論のために一般的にロードされます。バイナリファイルを読み取るには、データソース formatbinaryFileとして指定します。

前提条件

Databricks はバイナリファイルの使用に追加の設定は必要ありません。

オプション

DataFrameReader.option().options()のメソッドを使用して、バイナリファイルのデータソースを構成します。サポートされているオプションの完全なリストについては、Spark API オプション参照をご覧ください。

出力スキーマ

バイナリファイル・データソースは、次のカラムと、場合によってはパーティション・カラムも含む DataFrame を生成します:

  • path (StringType): ファイルのパス。
  • modificationTime (TimestampType):ファイルの更新時刻。一部の Hadoop ファイルシステムの実装では、このパラメーターが使用できない場合があり、その場合はデフォルト値が設定されます。
  • length (LongType): ファイルの長さ (バイト単位)。
  • content (BinaryType): ファイルの内容。

使い方

以下の例では、Spark DataFrame API および SQL を使用したバイナリファイルの読み込み、ファイルタイプによるフィルタリング、画像プレビューの表示、および読み取りパフォーマンスを向上させるための Delta テーブルへの保存について示しています。

バイナリファイルを読み込む

Apache Spark DataFrame API を使用して、変換、表示、またはダウンストリーム処理のためにバイナリファイルを DataFrame にロードします。

Python
df = spark.read.format("binaryFile").load("/Volumes/<catalog>/<schema>/<volume>/")
display(df)

読み取りオプションを構成する

パーティション検出の動作を維持しながら、特定の glob パターンに一致するパスを持つファイルをロードするには、 pathGlobFilter オプションを使用できます。 次のコードは、すべての JPG ファイルを パーティション検出を含む入力ディレクトリ:

Python
df = spark.read.format("binaryFile").option("pathGlobFilter", "*.jpg").load("/Volumes/<catalog>/<schema>/<volume>/images/")

パーティションの検出を無視して、入力ディレクトリの下のファイルを再帰的に検索する場合は、 recursiveFileLookup オプションを使用します。 このオプションは、ネストされたディレクトリを検索します 名前 date=2019-07-01.次のコードは、入力ディレクトリからすべての JPG ファイルを再帰的に読み取り、パーティションの検出を無視します。

Python
df = (spark.read.format("binaryFile")
.option("pathGlobFilter", "*.jpg")
.option("recursiveFileLookup", "true")
.load("/Volumes/<catalog>/<schema>/<volume>/images/"))

画像を読み込んで表示する

Databricks では、バイナリファイルデータソースを使用して、イメージデータをロードすることをお勧めします。Databricks display 関数は、バイナリ データソースを使用してロードされた画像データの表示をサポートしています。

読み込まれたすべてのファイルのファイル名に 画像拡張子が付いている場合、画像のプレビューは自動的に有効になります。

Python
df = spark.read.format("binaryFile").load("/Volumes/<catalog>/<schema>/<volume>/images/")
display(df) # image thumbnails are rendered in the "content" column

画像プレビュー

または、文字列値 "image/*"mimeType オプションを使用してバイナリ列に注釈を付けることで、イメージ プレビュー機能を強制することもできます。画像は、バイナリ コンテンツ内の形式情報に基づいてデコードされます。 サポートされているイメージ タイプは、 bmpgifjpeg、および pngです。 サポートされていないファイルは、壊れた画像アイコンとして表示されます。

Python
df = spark.read.format("binaryFile").option("mimeType", "image/*").load("/Volumes/<catalog>/<schema>/<volume>/images/")
display(df)

サポートされていないファイルタイプの画像プレビュー

画像データの処理に推奨されるワークフローについては、 画像アプリケーションのリファレンス ソリューション を参照してください。

Delta テーブルに保存

読み取りパフォーマンスを向上させるため、Databricksは、バイナリファイルから読み込んだデータをDeltaテーブルに保存することをお勧めします。

Python
df.write.format("delta").saveAsTable("<catalog>.<schema>.<table>")

その他のリソース

  • 画像ファイルを読み取る:ワークロードで、生のバイトではなく、高さ、幅、チャンネルデータなどの構造化された画像フィールドが必要とされる場合、イメージ データソースがデコードされたスキーマを提供します。