Excel dosyalarını okuma ve akışla aktarma

Azure Databricks, harici kitaplıklara veya manuel dosya dönüştürmelerine olan gereksinimi ortadan kaldırarak .xls ve .xlsx dosyalarını okumak için yerleşik destek sunar. Birden çok sayfa içeren bir çalışma kitabındaki herhangi bir sayfayı okuyabilir, belirli hücre aralıklarını seçebilir, şemayı ve veri türlerini otomatik olarak algılayabilir ve formül değerleriyle hesaplanmış sonuçları olarak çalışabilirsiniz. Excel dosyaları bulut depolamadan okunabilir veya doğrudan Veri Ekle kullanıcı arabirimine yüklenebilir ve Otomatik Yükleyici kullanılarak hem toplu iş hem de akış iş yüklerini destekler.

Önkoşullar

Excel dosyalarını okuma ve akışla işleme, Databricks Runtime 17.1 veya üzerini; akış iş yükleri için ise Auto Loader gerektirir.

Options

Excel veri kaynaklarını yapılandırmak için .option()'nin .options() ve DataFrameReader yöntemlerini kullanın. Desteklenen seçeneklerin tam listesi için bkz DataFrameReader . Excel seçenekleri ve DataFrameWriter Excel seçenekleri.

Usage

Aşağıdaki örneklerde Spark toplu işlemini (spark.read) ve akış API'lerini kullanarak Excel dosyaları okuma işlemi gösterilmektedir. Ayrıştırıcı varsayılan olarak, ilk sayfadaki tüm hücreleri sol üstten sağ alttaki boş olmayan hücreye okur; dataAddress belirli bir sayfayı veya hücre aralığını hedeflemek için seçeneğini kullanın. Şema otomatik olarak çıkarılır veya kendi şemanızı belirtebilirsiniz.

Kullanıcı arabiriminde tablo oluşturma veya değiştirme

Excel dosyalardan tablo oluşturmak için Tablo oluşturma veya değiştirme kullanıcı arabirimini kullanabilirsiniz. bir Excel dosyasını yükleyerek veya birimden veya dış konumdan Excel dosyası seçerek başlayın. Sayfayı seçin, üst bilgi satır sayısını ayarlayın ve isteğe bağlı olarak bir hücre aralığı belirtin. Kullanıcı arabirimi, seçili dosyadan ve sayfadan tek bir tablo oluşturmayı destekler.

Excel dosyalarını oku

Bulut depolamadan (örneğin S3, ADLS) bir Excel dosyasını spark.read.excel veya SQL'in read_files işlevini kullanarak okuyabilirsiniz.

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>))

SQL

-- Read an entire Excel file
CREATE TABLE my_table AS
SELECT * FROM read_files(
  "<path to excel directory or file>",
  schemaEvolutionMode => "none"
);

-- Read a specific sheet and range
CREATE TABLE my_sheet_table AS
SELECT * FROM read_files(
  "<path to excel directory or file>",
  format => "excel",
  headerRows => 1,
  dataAddress => "Sheet1!A2:D10",
  schemaEvolutionMode => "none"
);

Otomatik Yükleyici kullanarak Excel dosyalarını akışla aktarma

cloudFiles.format excel olarak ayarlayarak Otomatik Yükleyici'yi kullanarak Excel dosyalarının akışını yapabilirsiniz. Örneğin:

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>)

COPY INTO kullanarak Excel dosyaları alma

Bulut depolamadaki Excel dosyalarını bir Delta tablosuna idempotent şekilde yüklemek için COPY INTO kullanın.

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');

Liste sayfaları

listSheets işlemini kullanarak sayfaları bir Excel dosyasında listeleyebilirsiniz. Döndürülen şema aşağıdaki alanlara sahip bir'dir struct :

  • sheetIndex: uzun
  • sheetName: Dize

Örneğin:

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>))

SQL

SELECT * FROM read_files("<path to excel directory or file>",
  schemaEvolutionMode => "none",
  operation => "listSheets"
)

Karmaşık yapılandırılmamış Excel sayfalarını ayrıştırma

Karmaşık, yapılandırılmamış Excel sayfaları (örneğin, sayfa başına birden çok tablo, veri adaları) için Databricks, dataAddress seçeneklerini kullanarak Spark DataFrame'lerinizi oluşturmak için ihtiyacınız olan hücre aralıklarını ayıklamanızı önerir.

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

Sınırlamalar

  • Parola korumalı dosyalar desteklenmez.
  • Yalnızca bir üst bilgi satırı desteklenir.
  • Birleştirilmiş hücre değerleri yalnızca sol üst hücreye yerleşir. Kalan alt hücreler NULL olarak ayarlanmıştır.
  • Otomatik Yükleyici kullanılarak Excel dosyalarının akışı desteklenir, ancak şema evrimi desteklenmez. schemaEvolutionMode="None" öğesini açıkça ayarlamanız gerekir.
  • "Strict Open XML Spreadsheet (Strict OOXML)" desteklenmez.
  • Dosyalarda .xlsm makro yürütme desteklenmez.
  • Bu ignoreCorruptFiles seçenek desteklenmez.

FAQ

Lakeflow Connect'teki Excel bağlayıcısı hakkında sık sorulan soruların yanıtlarını bulun.

Tüm sayfaları aynı anda okuyabilir miyim?

Ayrıştırıcı aynı anda bir Excel dosyasından yalnızca bir sayfa okur. Varsayılan olarak, ilk sayfayı okur. seçeneğini kullanarak dataAddress farklı bir sayfa belirtebilirsiniz. Birden çok sayfayı işlemek için, önce operation seçeneğini listSheets olarak ayarlayarak sayfa listesini alın, ardından sayfa adlarını döngüye sokun ve her sayfa adını dataAddress seçeneğinde belirterek okuyun.

Sayfa başına karmaşık düzenlere veya birden çok tabloya sahip Excel dosyaları açayım mı?

Ayrıştırıcı varsayılan olarak tüm Excel hücreleri sol üst hücreden sağ alttaki boş olmayan hücreye okur. seçeneğini kullanarak dataAddress farklı bir hücre aralığı belirtebilirsiniz.

Formüller ve birleştirilmiş hücreler nasıl işlenir?

Formüller, hesaplandıkları değerler olarak kaydedilir. Birleştirilmiş hücreler için yalnızca sol üstteki değer korunur (alt hücreler NULL).

Otomatik Yükleyici ve akış işlerinde Excel veri alımını kullanabilir miyim?

Evet, cloudFiles.format = "excel" kullanarak Excel dosyalarının akışını yapabilirsiniz. Ancak, şema evrimi desteklenmez, bu nedenle "schemaEvolutionMode" değerini "None" olarak ayarlamanız gerekir.

Parola korumalı Excel destekleniyor mu?

Hayır. Bu işlev iş akışlarınız için kritikse Databricks hesap temsilcinize başvurun.

Ek kaynaklar

  • CSV dosyalarını okuma ve yazma: Veri kaynağınız CSV'ye aktarabiliyorsa, CSV daha geniş araç desteğine sahip daha basit bir biçimdir ve ayrılmış ayrıştırıcıya bağımlılığı yoktur.