Share via


Ficheiro binário

O Databricks Runtime suporta a fonte de dados de arquivo binário, que lê arquivos binários e converte cada arquivo em um único registro que contém o conteúdo bruto e os metadados do arquivo . A fonte de dados de arquivo binário produz um DataFrame com as seguintes colunas e, possivelmente, 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.

Para ler arquivos binários, especifique a fonte format de dados como binaryFile.

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 usando a fonte de display 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:

df = spark.read.format("binaryFile").load("<path-to-image-dir>")
display(df)    # image thumbnails are rendered in the "content" column

image preview

Como alternativa, você pode forçar a funcionalidade de visualização de imagem usando a opção com um valor "image/*" de cadeia de caracteres para anotar a mimeType 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, , gifjpege png. Os arquivos não suportados aparecem como um ícone de imagem quebrado.

df = spark.read.format("binaryFile").option("mimeType", "image/*").load("<path-to-dir>")
display(df)    # unsupported files are displayed as a broken image icon

image preview with unsupported file type

Consulte Solução de referência para aplicativos de imagem para o fluxo de trabalho recomendado para lidar com dados de imagem.

Opções

Para carregar arquivos com caminhos correspondentes a um determinado padrão de glob, mantendo o comportamento de descoberta de partição, você pode usar a pathGlobFilter opção. 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>")

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:

df = spark.read.format("binaryFile") \
  .option("pathGlobFilter", "*.jpg") \
  .option("recursiveFileLookup", "true") \
  .load("<path-to-dir>")

Existem APIs semelhantes para Scala, Java e R.

Nota

Para melhorar o desempenho de leitura quando você carrega dados de volta, o Azure Databricks recomenda desativar a compactação quando você salva dados carregados de arquivos binários:

spark.conf.set("spark.sql.parquet.compression.codec", "uncompressed")
df.write.format("delta").save("<path-to-table>")