Ler e transmissão arquivos do Excel
Beta
Este recurso está em Beta. Os administradores do espaço de trabalho podem controlar o acesso a esse recurso na página Pré-visualizações . Consulte Gerenciar prévias do Databricks.
Databricks inclui suporte integrada para ler arquivos .xls e .xlsx, eliminando a necessidade de bibliotecas externas ou conversões manuais de arquivo. É possível ler qualquer planilha de uma pasta de trabalho com várias planilhas, segmentar intervalos de células específicos, inferir automaticamente esquemas e tipos de dados e trabalhar com valores de fórmulas como seus resultados computados. Arquivos Excel podem ser lidos do armazenamento em cloud ou feitos upload diretamente na interface de usuário Adicionar Dados , e oferecem suporte a cargas de trabalho em lotes e de transmissão usando o Auto Loader.
Pré-requisitos
A leitura e transmissão de arquivos Excel requer o Databricks Runtime 17.1 ou acima e Auto Loader para cargas de trabalho de transmissão.
Opções
Use os métodos .option() e .options() de DataFrameReader para configurar fontes de dados do Excel. Para obter uma lista completa de opções compatíveis, consulte DataFrameReader opções do Excel e DataFrameWriter opções do Excel.
Uso
Os exemplos a seguir demonstram a leitura de arquivos Excel usando as APIs de lote (spark.read) e transmissão do Spark. Por padrão, o analisador lê todas as células da célula não vazia superior esquerda até a inferior direita na primeira planilha; use a opção dataAddress para direcionar uma planilha ou intervalo de células específico. O esquema é inferido automaticamente, ou pode-se especificar o próprio.
Criar ou modificar uma tabela na interface do usuário.
Você pode usar a interface de usuário "Criar ou modificar tabela" para criar tabelas a partir de arquivos do Excel. Comece carregando um arquivo Excel ou selecionando um arquivo Excel de um volume ou de um local externo. Selecione a planilha, ajuste o número de linhas de cabeçalho e, opcionalmente, especifique um intervalo de células. A interface do usuário permite criar uma única tabela a partir do arquivo e da planilha selecionados.
Ler arquivos do Excel
É possível ler um arquivo Excel do armazenamento em nuvem (por exemplo, S3, ADLS) usando spark.read.excel ou a função read_files do SQL.
- Python
- SQL
# 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>))
-- 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"
);
transmissão de arquivos Excel usando Auto Loader
Você pode transmitir arquivos Excel usando Auto Loader definindo cloudFiles.format para excel. Por exemplo:
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>)
Ingerir arquivos do Excel usando COPY INTO
Use COPY INTO para carregar arquivos Excel do armazenamento em cloud em uma tabela Delta de forma idempotente.
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');
Folhas de lista
Você pode listar as planilhas em um arquivo Excel usando as operações listSheets . O esquema retornado é um struct com os seguintes campos:
sheetIndex: longosheetName: strings
Por exemplo:
- Python
- SQL
# 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>))
SELECT * FROM read_files("<path to excel directory or file>",
schemaEvolutionMode => "none",
operation => "listSheets"
)
Analisar planilhas Excel complexas e não estruturadas
Para planilhas Excel complexas e não estruturadas (por exemplo, várias tabelas por planilha, ilhas de dados), Databricks recomenda extrair os intervalos de células necessários para criar seus Spark DataFrames usando as opções dataAddress.
df = (spark.read.format("excel")
.option("headerRows", 1)
.option("dataAddress", "Sheet1!A1:E10")
.load(<path to excel directory or file>))
Limitações
- Arquivos protegidos por senha não são suportados.
- Apenas uma linha de cabeçalho é suportada.
- Os valores da célula mesclada preenchem apenas a célula superior esquerda. As células filhas restantes são definidas como
NULL. - A transmissão de arquivos Excel usando Auto Loader é suportada, mas a evolução do esquema não. Você deve definir explicitamente
schemaEvolutionMode="None". - "Planilha Open XML estrita (OOXML estrita)" não é suportada.
- A execução de macros em arquivos
.xlsmnão é suportada. - A opção
ignoreCorruptFilesnão é suportada.
Perguntas frequentes
Encontre respostas para perguntas frequentes sobre o conector Excel no LakeFlow Connect.
Posso ler todas as folhas de uma vez?
O analisador sintático lê apenas uma planilha de um arquivo Excel por vez. Por default, ele lê a primeira folha. Você pode especificar uma planilha diferente usando a opção dataAddress . Para processar várias planilhas, primeiro recupere a lista de planilhas definindo a opção operation como listSheets, depois itere sobre os nomes das planilhas e leia cada uma fornecendo seu nome na opção dataAddress .
Posso importar arquivos Excel com complexyon ou várias tabelas por planilha?
Por default, o analisador lê todas as células não vazias Excel da célula superior esquerda até a célula inferior direita. Você pode especificar um intervalo de células diferente usando a opção dataAddress .
Como são tratadas as fórmulas e a mesclagem de células?
As fórmulas são inseridas conforme seus valores de cálculo. Para células mescladas, apenas o valor superior esquerdo é mantido (células filhas são NULL).
Posso usar a ingestão de Excel no Auto Loader e no Transmitir Job?
Sim, você pode transmitir arquivos Excel usando cloudFiles.format = "excel". No entanto, a evolução do esquema não é suportada, portanto você deve definir "schemaEvolutionMode" para "None".
O Excel protegido por senha é compatível?
Não. Se essa funcionalidade for essencial para o seu fluxo de trabalho, entre em contato com o seu representante account Databricks .
Recursos adicionais
- Ler e escrever arquivos CSV: se sua fonte de dados puder exportar para CSV, CSV é um formato mais simples com suporte mais amplo de ferramentas e sem dependência de um analisador dedicado.