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:

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 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 notebook de linhas malformadas

Abra o notebook em outra tab

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, 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 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.

Ler o notebook de arquivos CSV

Abra o notebook em outra tab

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.

Ler arquivos CSV com notebook de esquema

Abra o notebook em outra tab

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 notebook em outra tab