Ler arquivos CSV
Este artigo fornece exemplos de leitura de arquivos CSV com Databricks usando Python, Scala, R e SQL.
Observação
A Databricks recomenda a função read_files com valor de tabela para que os usuários do SQL leiam arquivos CSV. read_files
está disponível em Databricks Runtime 13.3 LTS e acima.
Você também pode usar uma view temporária. Se você usar SQL para ler dados CSV diretamente sem usar view temporária ou read_files
, as seguintes limitações serão aplicadas:
Não é possível especificar opções de fonte de dados.
Não é possível especificar o esquema dos dados.
Opções
O senhor pode configurar várias opções para o arquivo CSV fonte de dados. Consulte os seguintes artigos de referência do Apache Spark para obter as opções de leitura compatíveis:
Este artigo aborda apenas a leitura em CSV, mas o senhor pode saber mais sobre as opções de gravação suportadas nos seguintes artigos de referência em Apache Spark:
Trabalhar com registros CSV malformados
Na leitura de arquivos CSV com um esquema especificado, é possível que os dados dos arquivos não correspondam ao esquema. Por exemplo, um campo contendo o nome da cidade não será analisado como um número inteiro. As consequências dependem do modo em que o analisador for executado:
PERMISSIVE
(padrão): são inseridos valores "null" em campos que não puderam ser analisados corretamenteDROPMALFORMED
: descarta linhas que contêm campos que não puderam ser analisadosFAILFAST
: aborta a leitura se for encontrado algum dado malformado
Para definir o modo, use a opção mode
.
diamonds_df = (spark.read
.format("csv")
.option("mode", "PERMISSIVE")
.load("/databricks-datasets/Rdatasets/data-001/csv/ggplot2/diamonds.csv")
)
No modo PERMISSIVE
é possível inspecionar as linhas que não puderam ser analisadas corretamente com um dos seguintes métodos:
Você pode informar um caminho personalizado para a opção
badRecordsPath
para registrar registros corrompidos em um arquivo.Você pode adicionar a coluna
_corrupt_record
ao esquema informado ao DataFrameReader para revisar registros corrompidos no DataFrame resultante.
Observação
A opção badRecordsPath
tem precedência sobre _corrupt_record
, o que significa que as linhas malformadas gravadas no caminho informado não aparecem no DataFrame resultante.
O comportamento padrão para registros malformados quando se utiliza a coluna de dados resgatados.
Coluna de dados resgatados
Observação
Este recurso tem compatibilidade no Databricks Runtime 8.3 (sem suporte)e acima.
Se utilizar o modo PERMISSIVE
, você pode ativar a coluna de dados resgatados para capturar todos os dados que não foram analisados porque um ou mais campos em um registro apresentam um dos seguintes problemas:
Ausente do esquema informado.
Não corresponde ao tipo de dados do esquema informado.
Tem incompatibilidade de maiúsculas e minúsculas nos nomes de campos no esquema informado.
A coluna de dados resgatada é retornada como um documento JSON contendo as colunas que foram resgatadas e o caminho do arquivo de origem do registro. Para remover o caminho do arquivo de origem da coluna de dados resgatados, você pode definir a configuração SQL spark.conf.set("spark.databricks.sql.rescuedDataColumn.filePath.enabled", "false")
. Você pode ativar a coluna de dados resgatada configurando a opção rescuedDataColumn
para um nome de coluna ao ler dados, como _rescued_data
com spark.read.option("rescuedDataColumn", "_rescued_data").format("csv").load(<path>)
.
O analisador CSV suporta três modos ao analisar registros: PERMISSIVE
, DROPMALFORMED
e FAILFAST
. Quando utilizado junto com rescuedDataColumn
, as incompatibilidades de tipo de dados não fazem com que os registros sejam eliminados no modo DROPMALFORMED
nem geram um erro no modo FAILFAST
. Somente registros corrompidos, ou seja, CSV incompleto ou malformado, são descartados ou geram erros.
Quando rescuedDataColumn
é usado no modo PERMISSIVE
, as seguintes regras se aplicam a registros corrompidos:
A primeira linha do arquivo (uma linha de cabeçalho ou uma linha de dados) define o comprimento de linha esperado.
Uma linha com um número diferente de colunas é considerada incompleta.
Incompatibilidades de tipo de dados não são consideradas registros corrompidos.
Apenas registros CSV incompletos e malformados são considerados corrompidos e registrados na coluna
_corrupt_record
oubadRecordsPath
.
Exemplo SQL: Ler arquivo CSV
O exemplo SQL a seguir lê um arquivo CSV usando read_files
.
-- mode "FAILFAST" aborts file parsing with a RuntimeException if malformed lines are encountered
SELECT * FROM read_files(
's3://<bucket>/<path>/<file>.csv',
format => 'csv',
header => true,
mode => 'FAILFAST')
Exemplos de Scala, R e Python: leia o arquivo CSV
O Notebook a seguir mostra como ler um arquivo, exibir dados de amostra e imprimir o esquema de dados usando Scala, R e Python. Os exemplos nesta seção usam o datasetdiamantes. Especifique o caminho para o dataset , bem como as opções desejadas.
Exemplo: especificar esquema
Quando o esquema do arquivo CSV é conhecido, você pode especificar o esquema desejado para o leitor CSV com a opção schema
.
Exemplo de SQL usando read_files
:
SELECT * FROM read_files(
's3://<bucket>/<path>/<file>.csv',
format => 'csv',
header => false,
schema => 'id string, date date, event_time timestamp')
Exemplo: Armadilhas da leitura de um subconjunto de colunas
O comportamento do analisador de CSV depende do conjunto de colunas que forem lidas. Se o esquema especificado estiver incorreto, os resultados podem diferir consideravelmente, dependendo do subconjunto de colunas acessado. O notebook a seguir apresenta as armadilhas mais comuns.