Leitura de arquivos CSV

Este artigo fornece exemplos de leitura de arquivos CSV com o Azure Databricks usando Python, Scala, R e SQL.

Observação

O Databricks recomenda a função read_files table-valued para os usuários do SQL lerem arquivos CSV. read_files está disponível no Databricks Runtime 13.3 LTS e superior.

Você também pode usar um modo de exibição temporário. Se você usar o SQL para ler dados CSV diretamente sem usar modos de exibição temporários ou read_files, as seguintes limitações se aplicam:

Opções

É possível configurar várias opções para fontes de dados de arquivo CSV. Consulte os seguintes artigos de referência do Apache Spark para obter as opções de leitura com suporte:

Este artigo aborda apenas a leitura do CSV, mas você pode saber mais sobre as opções de gravação com suporte nos seguintes artigos de referência do Apache Spark:

Trabalhar com registros CSV malformados

Ao ler arquivos CSV com um esquema especificado, é possível que os dados nos arquivos não correspondam ao esquema. Por exemplo, um campo que contenha o nome da cidade não será analisado como inteiro. As consequências dependem do modo como o analisador é executado:

  • PERMISSIVE (padrão): nulos são inseridos para campos que não puderam ser analisados corretamente
  • DROPMALFORMED: remove linhas que contêm campos que não puderam ser analisados
  • FAILFAST: anula a leitura se algum dado malformado for encontrado

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 usando um dos seguintes métodos:

  • Você pode fornecer um caminho personalizado para a opção badRecordsPath de gravar registros corrompidos em um arquivo.
  • Você pode adicionar a coluna _corrupt_record ao esquema fornecido ao DataFrameReader para examinar registros corrompidos no DataFrame resultante.

Observação

A opção badRecordsPath tem precedência sobre _corrupt_record, o que significa que linhas malformadas gravadas no caminho fornecido não aparecem no DataFrame resultante.

Comportamento padrão para alterações de registros malformados ao usar a coluna de dados resgatados.

Localizar notebook de linhas malformadas

Obter notebook

Coluna de dados resgatados

Observação

Esse recurso está disponível no Databricks Runtime 8.3 (EoS) e superior.

Ao usar o modo PERMISSIVE, você pode permitir que a coluna de dados resgatados capture todos os dados que não foram analisados porque um ou mais campos em um registro têm um dos seguintes problemas:

  • Ausente do esquema fornecido.
  • Não corresponde ao tipo de dados do esquema fornecido.
  • Tem uma incompatibilidade de maiúsculas e minúsculas com os nomes de campo no esquema fornecido.

A coluna de dados resgatada é retornada como um documento JSON que contém 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, defina a configuração de SQL spark.conf.set("spark.databricks.sql.rescuedDataColumn.filePath.enabled", "false"). É possível habilitar a coluna de dados resgatados definindo a opção rescuedDataColumn como um nome de coluna ao ler os dados, como _rescued_data com spark.read.option("rescuedDataColumn", "_rescued_data").format("csv").load(<path>).

O analisador CSV dá suporte a três modos ao analisar registros: PERMISSIVE, DROPMALFORMED e FAILFAST. Quando usado junto a rescuedDataColumn, as incompatibilidades de tipo de dados não fazem com que os registros sejam removidos no modo DROPMALFORMED ou geram um erro no modo FAILFAST. Somente registros corrompidos, como CSV incompletos ou malformados, 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.
  • As incompatibilidades de tipo de dados não são consideradas registros corrompidos.
  • Somente 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 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: ler arquivo CSV

Esse notebook mostra como ler um arquivo, exibir dados de exemplo e imprimir o esquema de dados usando Scala, R, Python e SQL. Os exemplos nessa seção usam o conjunto de dados diamantes. Especifique o caminho para o conjunto de dados e para as opções que você preferir.

Ler notebook de arquivos CSV

Obter notebook

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.

Ler arquivos CSV com notebook de esquema

Obter notebook

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 de leitura de um subconjunto de colunas

O comportamento do analisador CSV depende do conjunto de colunas lidas. Se o esquema especificado estiver incorreto, os resultados poderão diferir consideravelmente, dependendo do subconjunto de colunas acessadas. O notebook a seguir apresenta as armadilhas mais comuns.

Advertências sobre a leitura de um subconjunto de colunas de um notebook de arquivos CSV

Obter notebook