Arquivo binário
O Databricks Runtime é compatível com fonte de dados de arquivo binário, que lê arquivos binários e os converte em um único registro com o conteúdo bruto e os metadados do arquivo. A fonte de dados do arquivo binário produz um DataFrame com as colunas a seguir e, possivelmente, colunas de partição:
path (StringType)
: o caminho do arquivo.modificationTime (TimestampType)
: date e hora de modificação do arquivo. Em algumas implementações de FileSystem do Hadoop, esse parâmetro pode estar indisponível e o valor seria definido como um valor padrão.length (LongType)
: o tamanho do arquivo em bytes.content (BinaryType)
: o conteúdo do arquivo.
Para ler arquivos binários, especifique a fonte de dados format
como binaryFile
.
Imagens
O Databricks recomenda usar a fonte de dados de arquivo binário para carregar dados de imagem.
A função Databricks display
dá suporte à exibição de dados de imagem carregados 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á habilitada automaticamente:
df = spark.read.format("binaryFile").load("<path-to-image-dir>")
display(df) # image thumbnails are rendered in the "content" column
Como alternativa, você pode forçar a funcionalidade de visualização da imagem usando a opção mimeType
com um valor "image/*"
de cadeia de caracteres para explicar a coluna binária. As imagens são decodificadas com base nas respectivas informações de formato no conteúdo binário. Os tipos de imagem com suporte são bmp
, gif
jpeg
e png
. Os arquivos sem suporte aparecem como um ícone de imagem quebrada.
df = spark.read.format("binaryFile").option("mimeType", "image/*").load("<path-to-dir>")
display(df) # unsupported files are displayed as a broken image icon
Consulte Solução de referência para aplicativos de imagem para informar-se sobre o fluxo de trabalho recomendado para manipular dados de imagem.
Opções
Para carregar arquivos com caminhos que correspondem a um determinado padrão glob e manter o comportamento da descoberta de partição, você 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:
df = spark.read.format("binaryFile").option("pathGlobFilter", "*.jpg").load("<path-to-dir>")
Para ignorar a descoberta de partição e pesquisar arquivos recursivamente no diretório de entrada, use a opção recursiveFileLookup
. Essa opção pesquisará diretórios aninhados, mesmo que os nomes deles não sigam um esquema de nomenclatura de partição 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:
df = spark.read.format("binaryFile") \
.option("pathGlobFilter", "*.jpg") \
.option("recursiveFileLookup", "true") \
.load("<path-to-dir>")
Existem APIs semelhantes para Scala, Java e R.
Observação
Para aprimorar o desempenho de leitura quando você carrega os dados novamente, o Azure Databricks recomenda salvar os dados carregados dos arquivos de binários usando tabelas Delta:
df.write.save("<path-to-table>")