Ler e gravar em arquivos CSV

Este artigo apresenta exemplos de leitura e gravação em arquivos CSV com Databricks com 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:

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 e gravação com suporte.

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 corretamente

  • DROPMALFORMED: descarta linhas que contêm campos que não puderam ser analisados

  • FAILFAST: 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.

Localizar bloco de anotações de linhas malformadas

Abra o bloco de anotações em outra guia

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, DROPMALFORMEDe 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 ou badRecordsPath.

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.

Leia o bloco de anotações de arquivos CSV

Abra o bloco de anotações em outra guia

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.

Leia arquivos CSV com notebook de esquema

Abra o bloco de anotações em outra guia

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.

Advertências da leitura de um subconjunto de colunas de um notebook de arquivo CSV

Abra o bloco de anotações em outra guia