Partilhar via


Ler ficheiros CSV

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

Nota

O Databricks recomenda a função read_files tablecom valor para os utilizadores de SQL lerem ficheiros 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 SQL para ler dados CSV diretamente sem usar views temporários 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 suportadas:

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

Trabalhar com registos CSV mal formados

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

  • PERMISSIVE (padrão): nulos são inseridos para 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 algum dado malformado for encontrado

Para o set 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")
)

PERMISSIVE No modo, é 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 o column_corrupt_record ao schema fornecido ao DataFrameReader para revisar registros corrompidos no DataFrame resultante.

Nota

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

O comportamento padrão para registos malformados altera-se ao usar dados resgatados column.

Localizar bloco de notas de linhas malformadas

Get portátil

Dados resgatados column

Nota

Este recurso é suportado no Databricks Runtime 8.3 (EoS) e superior.

Ao usar o modo PERMISSIVE, você pode habilitar o column de dados resgatados para capturar quaisquer dados que não foram analisados porque um ou mais campos em um registro têm um dos seguintes problemas:

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

Os dados column resgatados são retornados como um documento JSON contendo os columns que foram resgatados e o caminho do ficheiro de origem do registo. Para remove o caminho do ficheiro de origem a partir dos dados resgatados column, pode set a configuração SQL spark.conf.set("spark.databricks.sql.rescuedDataColumn.filePath.enabled", "false"). Você pode ativar os dados resgatados column ao definir a opção rescuedDataColumn para um nome column 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 usado em conjunto com rescuedDataColumno , as incompatibilidades de tipo de dados não fazem com que os registros sejam descartados no DROPMALFORMED modo ou gerem um erro no FAILFAST modo. Somente registros corrompidos, ou seja, CSV incompletos ou malformados, são descartados ou geram erros.

Quando rescuedDataColumn usado no PERMISSIVE modo, 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 columns é considerada incompleta.
  • Incompatibilidades de tipo de dados não são consideradas registros corrompidos.
  • Somente registros CSV incompletos e malformados são considerados corrompidos e registrados no _corrupt_recordcolumn ou badRecordsPath.

Exemplo SQL: Ler arquivo CSV

O exemplo SQL a seguir lê um arquivo CSV usando read_fileso .

-- 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 bloco de anotações a seguir mostra como ler um arquivo, exibir dados de exemplo e imprimir os dados schema usando Scala, R e Python. Os exemplos nesta seção usam o conjunto de dados diamantes. Especifique o caminho para o conjunto de dados, bem como quaisquer opções que desejar.

Ler bloco de notas de ficheiros CSV

Get portátil

Exemplo: especificar schema

Quando a schema do arquivo CSV for conhecida, você poderá especificar a schema desejada para o leitor CSV com a opção schema.

Ler ficheiros CSV com schema bloco de notas

Get caderno

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 na leitura de um subconjunto do columns

O comportamento do analisador CSV depende do set de columns que são lidos. Se o schema especificado estiver incorreto, os resultados podem diferir consideravelmente dependendo do subconjunto de columns que é acessado. O caderno a seguir apresenta as armadilhas mais comuns.

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

Get caderno