Kommentar
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
Azure Databricks innehåller inbyggt stöd för läsning .xls och .xlsx filer, vilket eliminerar behovet av externa bibliotek eller manuella filkonverteringar. Du kan läsa valfritt blad från en arbetsbok med flera blad, målspecifika cellintervall, automatiskt härleda schema- och datatyper och arbeta med formelvärden som beräknade resultat. Excel-filer kan läsas från molnlagring eller laddas upp direkt i användargränssnittet Lägg till data, och stöder både batch- och strömmande arbetsbelastningar med Auto Loader.
Förutsättningar
Att läsa och strömma Excel-filer kräver Databricks Runtime 17.1 eller senare och Auto Loader för arbetsbelastningar med strömning.
Options
.option() Använd metoderna .options() och DataFrameReader för att konfigurera Excel datakällor. En fullständig lista över alternativ DataFrameReader som stöds finns i Excel alternativ och DataFrameWriter Excel alternativ.
Usage
Följande exempel visar hur man läser Excel-filer med Spark batch- (spark.read) och streaming-API:er. Som standard läser parsern alla celler från den övre vänstra till den nedre högra icke-tomma cellen i det första bladet. använd alternativet dataAddress för att rikta in dig på ett visst blad eller cellområde. Schemat härleds automatiskt, eller så kan du ange ett eget.
Skapa eller ändra en tabell i användargränssnittet
Du kan använda användargränssnittet Skapa eller ändra tabell för att skapa tabeller från Excel filer. Börja med att ladda upp en Excel fil eller välj en Excel fil från en volym eller en extern plats. Välj bladet, justera antalet rubrikrader och ange ett cellområde. Användargränssnittet har stöd för att skapa en enda tabell från den valda filen och bladet.
Läsa Excel filer
Du kan läsa en Excel fil från molnlagring (till exempel S3, ADLS) med hjälp av spark.read.excel eller SQL:s read_files funktion.
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"
);
Strömma Excel-filer med Auto Loader
Du kan strömma Excel filer med automatisk inläsning genom att ange cloudFiles.format till excel. Till exempel:
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>)
Mata in Excel filer med COPY INTO
Använd COPY INTO för att läsa in Excel-filer från molnlagring i en Delta-tabell på ett idempotent sätt.
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');
Lista blad
Du kan lista bladen i en Excel fil med hjälp av åtgärden listSheets. Det returnerade schemat är ett struct med följande fält:
-
sheetIndex: lång -
sheetName: Sträng
Till exempel:
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"
)
Parsa komplexa icke-strukturerade Excel blad
För komplexa, icke-strukturerade Excel blad (till exempel flera tabeller per blad, dataöar) rekommenderar Databricks att du extraherar cellintervallen som du behöver för att skapa dina Spark DataFrames med hjälp av alternativen dataAddress.
df = (spark.read.format("excel")
.option("headerRows", 1)
.option("dataAddress", "Sheet1!A1:E10")
.load(<path to excel directory or file>))
Begränsningar
- Lösenordsskyddade filer stöds inte.
- Endast en rubrikrad stöds.
- Sammanfogade cellvärden fylls endast i cellen längst upp till vänster. Återstående barnceller ställs in på
NULL. - Strömma Excel-filer med automatisk inläsning stöds, men schematillväxt stödjs inte. Du måste uttryckligen ange
schemaEvolutionMode="None". - "Strikt Open XML-kalkylblad (Strikt OOXML)" stöds inte.
- Makrokörning i
.xlsmfiler stöds inte. - Alternativet
ignoreCorruptFilesstöds inte.
Vanliga frågor
Hitta svar på vanliga frågor om Excel-anslutningsappen i Lakeflow Connect.
Kan jag läsa alla blad samtidigt?
Parsern läser bara ett blad från en Excel fil i taget. Som standard läser den det första bladet. Du kan ange ett annat blad med hjälp av dataAddress alternativet . Om du vill bearbeta flera blad hämtar du först listan över blad genom att ange operation alternativet till listSheets, sedan iterera över bladnamnen och läsa var och en genom att ange dess namn i dataAddress alternativet .
Kan jag mata in Excel filer med komplexa layouter eller flera tabeller per blad?
Som standard läser parsern alla Excel celler från den övre vänstra cellen till den nedre högra cellen som inte är tom. Du kan ange ett annat cellområde med hjälp av dataAddress alternativet .
Hur hanteras formler och sammanfogade celler?
Formler matas in som beräknade värden. För sammanslagna celler behålls endast värdet i det övre vänstra hörnet (underordnade celler är NULL).
Kan jag använda Excel-data i Auto Loader och streamingjobb?
Ja, du kan strömma Excel filer med hjälp av cloudFiles.format = "excel". Schemautvecklingen stöds dock inte, så du måste ange "schemaEvolutionMode" till "None".
Stöds lösenordsskyddade Excel-filer?
Nej. Om den här funktionen är viktig för dina arbetsflöden kontaktar du din Databricks-kontorepresentant.
Ytterligare resurser
- Läsa och skriva CSV-filer: Om datakällan kan exporteras till CSV är CSV ett enklare format med bredare verktygsstöd och inget beroende av en dedikerad parser.