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:
- Não é possível especificar opções de fonte de dados.
- Não é possível especificar o esquema para os dados.
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 corretamenteDROPMALFORMED
: remove linhas que contêm campos que não puderam ser analisadosFAILFAST
: 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
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
oubadRecordsPath
.
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
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
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.