Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
Importante
O Databricks recomenda o uso da fonte de dados de arquivo binário para carregar dados de imagem no DataFrame do Spark como bytes brutos. Consulte Solução de referência para aplicativos de imagem para informar-se sobre o fluxo de trabalho recomendado para manipular dados de imagem.
A fonte de dados de imagem abstrai dos detalhes das representações de imagem e fornece uma API padrão para carregar dados de imagem. Para ler arquivos de imagem, especifique a fonte de dados format como image.
df = spark.read.format("image").load("<path-to-image-data>")
Existem APIs semelhantes para Scala, Java e R.
Você pode importar uma estrutura de diretórios aninhadas (por exemplo, usar um caminho como /path/to/dir/) e usar a descoberta de partição especificando um caminho com um diretório de partição (ou seja, um caminho como /path/to/dir/date=2018-01-02/category=automobile).
Estrutura da imagem
Os arquivos de imagem são carregados como um DataFrame que contém uma única coluna de tipo “struct” chamada image com os seguintes campos:
image: struct containing all the image data
|-- origin: string representing the source URI
|-- height: integer, image height in pixels
|-- width: integer, image width in pixels
|-- nChannels
|-- mode
|-- data
em que os campos são:
nChannels: o número de canais de cores. Os valores típicos são 1 para imagens em escala de cinza, 3 para imagens coloridas (por exemplo, RGB) e 4 para imagens coloridas com canal alfa.mode: sinalizador de inteiro que indica como interpretar o campo de dados. Especifica o tipo de dados e a ordem de canal em que os dados são armazenados. É esperado (mas não imposto) que o valor do campo seja mapeado para um dos tipos OpenCV exibidos na tabela a seguir. Os tipos OpenCV são definidos para 1, 2, 3 ou 4 canais e vários tipos de dados para os valores de pixel. A ordem do canal especifica a ordem de armazenamento das cores. Por exemplo, se você tiver uma imagem típica de três canais com componentes vermelhos, azuis e verdes, haverá seis ordenações possíveis. A maioria das bibliotecas usa RGB ou BGR. Três (quatro) tipos OpenCV de canal devem estar na ordem BGR(A).Mapa de Tipo para Números no OpenCV (tipos de dados x número de canais)
| Tipo | C1 | C2 | C3 | C4 |
|---|---|---|---|---|
| CV_8U | 0 | 8 | 16 | 24 |
| CV_8S | 1 | 9 | 17 | 25 |
| CV_16U | 2 | 10 | 18 | 26 |
| CV_16S | 3 | 11 | 19 | 27 |
| CV_32U | 4 | 12 | 20 | 28 |
| CV_32S | 5 | 13 | 21 | 29 |
| CV_64F | 6 | 14 | 22 | 30 |
-
data: Dados de imagem armazenados em formato binário. Os dados de imagem são representados como matriz tridimensional com a forma da dimensão (altura, largura, nChannels) e valores de matriz do tipo t especificados pelo campo de modo. A matriz é armazenada em ordem de linha principal.
Exibir dados de imagem
A função display do Databricks oferece suporte à exibição de dados de imagem. Consulte Imagens.
Exemplo de Notebook: leitura e gravação de dados em arquivos de imagem
O notebook a seguir mostra como ler e gravar dados em arquivos de imagem.
Imagem de notebook da fonte de dados
Limitações da fonte de dados da imagem
A fonte de dados de imagem decodifica os arquivos de imagem durante a criação do DataFrame do Spark, aumenta o tamanho dos dados e traz limitações nos seguintes cenários:
- Manter o DataFrame: se você quiser manter o DataFrame em uma tabela Delta para facilitar o acesso, deverá manter os bytes brutos em vez d e decodificados, para economizar espaço em disco.
- Embaralhar as partições: embaralhar os dados de imagem decodificados requer mais espaço em disco e largura de banda de rede, o que resulta em embaralhamento mais lento. Você deve atrasar a decodificação da imagem o máximo possível.
- Escolha de outro método de decodificação: a fonte de dados de imagem usa a biblioteca de E/S de Imagem do javax para decodificar a imagem, o que impede a escolha de outras bibliotecas de decodificação de imagem para melhorar o desempenho ou a implementação de uma lógica de decodificação personalizada.
Essas limitações podem ser evitadas com o uso da fonte de dados de arquivo binário para carregar dados de imagem e a decodificação somente conforme necessário.