Ler arquivos CSV
Este artigo apresenta exemplos de leitura de arquivos CSV com o Databricks usando o Python, Scala, R e SQL.
Observação
O Databricks recomenda a função read_files table-valued para que os usuários do SQL leiam arquivos CSV. read_files
está disponível no Databricks Runtime 13.3 LTS e acima.
Você também pode usar uma exibição temporária. Se você usar SQL para ler dados CSV diretamente sem usar exibições temporárias ou read_files
, as seguintes limitações se aplicam:
Não é possível especificar opções de fonte de dados.
Não é possível especificar o esquema dos dados.
Opções
Você pode configurar várias opções para fontes de dados de arquivos CSV. 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 de CSV, mas você pode saber mais sobre as opções de gravação compatíveis nos seguintes artigos de referência do 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
Esse recurso é suportado no Databricks Runtime 8.3 (EoS) e versões superiores.
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 resgatados é 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 resgatados definindo a opção rescuedDataColumn
para um nome de coluna na leitura de 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 de SQL: ler arquivo CSV
O exemplo de SQL a seguir faz a leitura de 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: ler arquivo CSV
O notebook a seguir mostra como ler um arquivo, exibir dados de exemplo e imprimir o esquema de dados usando Scala, R e Python. Os exemplos desta seção utilizam o dataset de diamantes. 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 de 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.