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

Excelファイルを読み込み、ストリームする

備考

ベータ版

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

Databricks は、.xls および .xlsx ファイルの組み込み読み取りをサポートしているため、外部ライブラリや手動のファイル変換の必要がありません。複数のシートからなるワークブックから任意のシートを読み込み、特定のセル範囲をターゲットにし、スキーマとデータ型を自動的に推測し、計算結果として数式値としてコンピュートできます。Excelファイルは、クラウドストレージから読み取ったり、**[データの追加]** UIで直接アップロードしたりできます。また、AutoLoaderを使用して、バッチおよびストリーミングの両方のワークロードに対応しています。

前提条件

Excelファイルの読み取りとストリーミングには、Databricks Runtime 17.1以降と、ストリーミングワークロード用のAuto Loaderが必要です。

オプション

DataFrameReader.option().options()メソッドを使用して、Excelデータソースを構成します。サポートされているオプションの完全なリストについては、DataFrameReader Excel オプションおよびDataFrameWriter Excel オプションを参照してください。

使い方

次の例では、Sparkのバッチ (spark.read) およびストリーミングAPIs を使用したExcelファイルの読み取り方法を示します。デフォルトでは、パーサーは最初のシートの左上から右下の空でないセルまで、すべてのセルを読み込みます。特定のシートまたはセル範囲を対象にするには、dataAddressオプションを使用してください。スキーマは自動的に推論されます。または、ご自身で指定することも可能です。

UI でテーブルを作成または変更する

テーブルの作成または変更 UI を使用して、Excel ファイルからテーブルを作成できます。まずExcelファイルをアップロードするか、ボリュームまたは外部ロケーションからExcelファイルを選択します。 シートを選択し、ヘッダー行の数を調整し、必要に応じてセル範囲を指定します。UI は、選択したファイルとシートから単一のテーブルを作成することをサポートしています。

Excelファイルを読み込む

Excelファイルをクラウドストレージ(たとえば、S3、ADLS)から、spark.read.excelまたはSQLのread_files関数を使用して読み取ることができます。

Python
# Read the first sheet from a single Excel file or from multiple Excel files in a directory
df = (spark.read.excel(<path to excel directory or file>))

# Infer schema field name from the header row
df = (spark.read
.option("headerRows", 1)
.excel(<path to excel directory or file>))

# Read a specific sheet and range
df = (spark.read
.option("headerRows", 1)
.option("dataAddress", "Sheet1!A1:E10")
.excel(<path to excel directory or file>))

Auto Loaderを使用したストリームExcelファイル

cloudFiles.formatexcelに設定すると、 Auto Loaderを使用してExcelファイルをストリームできます。 例えば:

Python
df = (
spark
.readStream
.format("cloudFiles")
.option("cloudFiles.format", "excel")
.option("cloudFiles.inferColumnTypes", True)
.option("headerRows", 1)
.option("cloudFiles.schemaLocation", "<path to schema location dir>")
.option("cloudFiles.schemaEvolutionMode", "none")
.load(<path to excel directory or file>)
)
df.writeStream
.format("delta")
.option("mergeSchema", "true")
.option("checkpointLocation", "<path to checkpoint location dir>")
.table(<table name>)

Excelファイルを取り込む COPY INTO

COPY INTOを使用すると、クラウド ストレージからExcelファイルをDeltaテーブルにべき等に読み込むことができます。

SQL
CREATE TABLE IF NOT EXISTS excel_demo_table;

COPY INTO excel_demo_table
FROM "<path to excel directory or file>"
FILEFORMAT = EXCEL
FORMAT_OPTIONS ('mergeSchema' = 'true')
COPY_OPTIONS ('mergeSchema' = 'true');

シートの一覧

listSheets操作を使用して、Excel ファイル内のシートを一覧表示できます。返されるスキーマは次のフィールドを持つstructです。

  • sheetIndex: long
  • sheetName: String

例えば:

Python
# List the name of the Sheets in an Excel file
df = (spark.read.format("excel")
.option("operation", "listSheets")
.load(<path to excel directory or file>))

複雑な非構造化 Excel シートを解析する

複雑で非構造化されたExcelシート(たとえば、シートごとの複数のテーブル、データアイランド)の場合、Databricksでは、Sparkデータフレームを作成するために必要なセル範囲をdataAddressオプションを使用して抽出することをお勧めします。

Python
df = (spark.read.format("excel")
.option("headerRows", 1)
.option("dataAddress", "Sheet1!A1:E10")
.load(<path to excel directory or file>))

制限事項

  • パスワードで保護されたファイルはサポートされていません。
  • サポートされるヘッダー行は 1 つだけです。
  • 結合されたセルの値は左上のセルにのみ入力されます。残りの子セルはNULLに設定されます。
  • Auto Loaderを使用したストリーミングExcelファイルはサポートされていますが、スキーマ進化はサポートされていません。 schemaEvolutionMode="None"明示的に設定する必要があります。
  • 「Strict Open XML スプレッドシート (Strict OOXML)」はサポートされていません。
  • .xlsmファイルでのマクロ実行はサポートされていません。
  • ignoreCorruptFilesオプションはサポートされていません。

よくある質問

LakeFlow ConnectのExcelコネクタに関するよくある質問への回答を見つけます。

一度にすべてのシートを読むことはできますか?

パーサーは一度に Excel ファイルから 1 つのシートのみを読み取ります。デフォルトでは、最初のシートを読み取ります。dataAddressオプションを使用して別のシートを指定できます。複数のシートを処理するには、まずoperationオプションをlistSheetsに設定してシートのリストを取得し、次にシート名を反復処理して、 dataAddressオプションで名前を指定して各シートを読み取ります。

複雑なレイアウトやシートごとに複数のテーブルがある Excel ファイルを取り込むことはできますか?

デフォルトでは、パーサーは左上のセルから右下の空でないセルまですべての Excel セルを読み取ります。dataAddressオプションを使用して別のセル範囲を指定できます。

数式と結合セルはどのように処理されますか?

数式はコンピュート値として取り込まれます。 結合されたセルの場合、左上の値のみが保持されます (子セルはNULLです)。

Auto Loaderおよびストリーミング ジョブでExcel取り込みを使用できますか?

はい、 cloudFiles.format = "excel"を使用してExcelファイルをストリームできます。 ただし、スキーマ進化はサポートされていないため、 "schemaEvolutionMode" "None"に設定する必要があります。

パスワードで保護された Excel はサポートされていますか?

いいえ。この機能がワークフローにとって重要である場合は、Databricks アカウント担当者にお問い合わせください。

その他のリソース

  • CSVファイルの読み取りと書き込み: データソースがCSVにエクスポートできる場合、CSVはよりシンプルな形式であり、幅広いツールに対応しており、専用のパーサーに依存しません。