Nota
O acesso a esta página requer autorização. Pode tentar iniciar sessão ou alterar os diretórios.
O acesso a esta página requer autorização. Pode tentar alterar os diretórios.
O Azure Databricks suporta a fonte de dados de ficheiros binários, que lê ficheiros binários e converte cada ficheiro num único registo contendo o conteúdo bruto e os metadados do ficheiro. É comumente usado para carregar dados não estruturados, como imagens, áudio ou ficheiros PDF, para processamento a jusante ou inferência de ML. Para ler arquivos binários, especifique a fonte format de dados como binaryFile.
Prerequisites
O Azure Databricks não requer configuração adicional para usar ficheiros binários.
Opções
Use os métodos .option() e .options() de DataFrameReader para configurar a origem de dados do ficheiro binário. Para uma lista completa de opções suportadas, consulte a referência de opções da API Spark.
Esquema de saída
A fonte de dados do ficheiro binário produz um DataFrame com as seguintes colunas, mais quaisquer colunas de partição:
-
path (StringType): O caminho do arquivo. -
modificationTime (TimestampType): O tempo de modificação do arquivo. Em algumas implementações do Hadoop FileSystem, esse parâmetro pode não estar disponível e o valor seria definido como um valor padrão. -
length (LongType): O comprimento do arquivo em bytes. -
content (BinaryType): O conteúdo do arquivo.
Usage
Os exemplos seguintes demonstram o carregamento de ficheiros binários usando a API Spark DataFrame e SQL, filtragem por tipo de ficheiro, visualização de imagens e gravação numa tabela Delta para melhorar o desempenho de leitura.
Ler ficheiros binários
Use a API Apache Spark DataFrame para carregar ficheiros binários num DataFrame para transformação, visualização ou processamento a jusante.
Python
df = spark.read.format("binaryFile").load("/Volumes/<catalog>/<schema>/<volume>/")
display(df)
Scala
val df = spark.read.format("binaryFile").load("/Volumes/<catalog>/<schema>/<volume>/")
df.show()
SQL
SELECT path, length, modificationTime FROM read_files(
'/Volumes/<catalog>/<schema>/<volume>/images/',
format => 'binaryFile'
)
Configurar opções de leitura
Para carregar ficheiros com caminhos que correspondam a um determinado padrão de glob, mantendo o comportamento de descoberta de partições, pode usar a opção pathGlobFilter. O código a seguir lê todos os arquivos JPG do diretório de entrada com descoberta de partição:
Python
df = spark.read.format("binaryFile").option("pathGlobFilter", "*.jpg").load("/Volumes/<catalog>/<schema>/<volume>/images/")
Scala
val df = spark.read.format("binaryFile").option("pathGlobFilter", "*.jpg").load("/Volumes/<catalog>/<schema>/<volume>/images/")
SQL
SELECT * FROM read_files(
'/Volumes/<catalog>/<schema>/<volume>/images/',
format => 'binaryFile',
pathGlobFilter => '*.jpg'
)
Se você quiser ignorar a descoberta de partição e pesquisar recursivamente arquivos no diretório de entrada, use a recursiveFileLookup opção. Esta opção pesquisa diretórios aninhados, mesmo que seus nomes não sigam um esquema de nomenclatura de partições como date=2019-07-01.
O código a seguir lê todos os arquivos JPG recursivamente do diretório de entrada e ignora a descoberta de partição:
Python
df = (spark.read.format("binaryFile")
.option("pathGlobFilter", "*.jpg")
.option("recursiveFileLookup", "true")
.load("/Volumes/<catalog>/<schema>/<volume>/images/"))
Scala
val df = spark.read.format("binaryFile")
.option("pathGlobFilter", "*.jpg")
.option("recursiveFileLookup", "true")
.load("/Volumes/<catalog>/<schema>/<volume>/images/")
SQL
SELECT * FROM read_files(
'/Volumes/<catalog>/<schema>/<volume>/images/',
format => 'binaryFile',
pathGlobFilter => '*.jpg',
recursiveFileLookup => true
)
Carregar e exibir imagens
O Databricks recomenda que você use a fonte de dados de arquivo binário para carregar dados de imagem. A função Databricks suporta a exibição de dados de imagem carregados display usando a fonte de dados binária.
Se todos os arquivos carregados tiverem um nome de arquivo com uma extensão de imagem, a visualização da imagem será ativada automaticamente:
Python
df = spark.read.format("binaryFile").load("/Volumes/<catalog>/<schema>/<volume>/images/")
display(df) # image thumbnails are rendered in the "content" column
Scala
val df = spark.read.format("binaryFile").load("/Volumes/<catalog>/<schema>/<volume>/images/")
df.show()
SQL
SELECT * FROM read_files(
'/Volumes/<catalog>/<schema>/<volume>/images/',
format => 'binaryFile'
)
Como alternativa, pode forçar a funcionalidade de pré-visualização de imagem usando a opção mimeType com um valor de string "image/*" para anotar a coluna binária. As imagens são decodificadas com base em suas informações de formato no conteúdo binário. Os tipos de imagem suportados são bmp, gif, jpege png. Os arquivos não suportados aparecem como um ícone de imagem quebrado.
Python
df = spark.read.format("binaryFile").option("mimeType", "image/*").load("/Volumes/<catalog>/<schema>/<volume>/images/")
display(df)
Scala
val df = spark.read.format("binaryFile").option("mimeType", "image/*").load("/Volumes/<catalog>/<schema>/<volume>/images/")
df.show()
SQL
SELECT * FROM read_files(
'/Volumes/<catalog>/<schema>/<volume>/images/',
format => 'binaryFile',
mimeType => 'image/*'
)
Consulte Solução de referência para aplicativos de imagem para o fluxo de trabalho recomendado para lidar com dados de imagem.
Gravar na tabela Delta
Para melhorar o desempenho da leitura quando carregas dados de volta, o Azure Databricks recomenda guardar os dados carregados de ficheiros binários para uma tabela Delta.
Python
df.write.format("delta").saveAsTable("<catalog>.<schema>.<table>")
Scala
df.write.format("delta").saveAsTable("<catalog>.<schema>.<table>")
Recursos adicionais
- Ler ficheiros de imagem: Se a sua carga de trabalho requer campos estruturados de imagem como altura, largura e dados de canal em vez de bytes brutos, a fonte de dados da imagem fornece um esquema decodificado.