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 com valor de tabela read_files para que os usuários do SQL leiam 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 SQL para ler dados CSV diretamente sem usar exibições temporárias 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
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 esquema especificado, é possível que os dados nos arquivos não correspondam ao esquema. 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 corretamenteDROPMALFORMED
: descarta linhas que contêm campos que não puderam ser analisadosFAILFAST
: aborta a leitura se algum dado malformado for encontrado
Para definir o modo, use a mode
opção.
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 a coluna
_corrupt_record
ao esquema 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 alterações de registros malformados ao usar a coluna de dados resgatados.
Localizar bloco de notas de linhas malformadas
Coluna de dados resgatados
Nota
Este recurso é suportado no Databricks Runtime 8.3 (EoS) e superior.
Ao usar o PERMISSIVE
modo, você pode habilitar a coluna 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 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 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 spark.conf.set("spark.databricks.sql.rescuedDataColumn.filePath.enabled", "false")
SQL . Você pode habilitar a coluna de dados resgatados definindo a opção rescuedDataColumn
como 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
, DROPMALFORMED
e FAILFAST
. Quando usado em conjunto com rescuedDataColumn
o , 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 colunas é 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 na
_corrupt_record
coluna oubadRecordsPath
.
Exemplo SQL: Ler arquivo CSV
O exemplo SQL a seguir lê um arquivo CSV usando read_files
o .
-- 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 o esquema de dados 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
Exemplo: Especificar esquema
Quando o esquema do arquivo CSV é conhecido, você pode especificar o esquema desejado para o leitor CSV com a schema
opção.
Ler arquivos CSV com o bloco de anotações 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 da leitura de um subconjunto de colunas
O comportamento do analisador CSV depende do conjunto de colunas que são lidas. Se o esquema especificado estiver incorreto, os resultados podem diferir consideravelmente dependendo do subconjunto de colunas que é acessado. O caderno a seguir apresenta as armadilhas mais comuns.