Arquivo binário

O Databricks Runtime dá suporte à 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. O arquivo binário fonte de dados produz um DataFrame com as seguintes colunas e possivelmente colunas de partição:

  • path (StringType): O caminho do arquivo.

  • modificationTime (TimestampType): A hora da modificação do arquivo. Em algumas implementações do Hadoop FileSystem, esse parâmetro pode estar indisponível e o valor seria definido como um valor default .

  • length (LongType): O comprimento 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

A Databricks recomenda que você use o arquivo binário fonte de dados para carregar dados de imagem.

A função display do Databricks 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 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
Pré-visualização de imagem

Como alternativa, você pode forçar a funcionalidade de visualização da imagem usando a opção mimeType com um valor strings "image/*" para anotar a coluna binária. As imagens são decodificadas com base em seu formato de informação no conteúdo binário. Os tipos de imagem suportados são bmp, gif, jpeg e png. 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
visualização de imagem com tipo de arquivo não suportado

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

Opções

Para carregar arquivos com caminhos que correspondam a um determinado padrão glob e ao mesmo tempo manter o comportamento de 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>")

Se você quiser ignorar a descoberta de partição e pesquisar arquivos recursivamente no diretório de entrada, use a opção recursiveFileLookup . Esta opção pesquisa diretórios aninhados mesmo que seus nomes 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 melhorar o desempenho de leitura ao carregar dados de volta, a Databricks recomenda desligar a compactação ao salvar dados carregados de arquivos binários:

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