Notatka
Dostęp do tej strony wymaga autoryzacji. Może spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Azure Databricks obsługuje źródło danych plików binarnych, które odczytuje pliki binarne i konwertuje każdy plik na jeden rekord zawierający nieprzetworzonej zawartości i metadanych pliku. Jest on często używany do ładowania danych bez struktury, takich jak obrazy, audio lub pliki PDF do przetwarzania podrzędnego lub wnioskowania uczenia maszynowego. Aby odczytać pliki binarne, określ źródło format danych jako binaryFile.
Wymagania wstępne
Azure Databricks nie wymaga dodatkowej konfiguracji do korzystania z plików binarnych.
Opcje
Użyj metod .option() i .options() klasy DataFrameReader, aby skonfigurować źródło danych pliku binarnego. Aby uzyskać pełną listę obsługiwanych opcji, zobacz Dokumentacja opcji interfejsu API platformy Spark.
Schemat danych wyjściowych
Źródło danych plików binarnych tworzy obiekt DataFrame z następującymi kolumnami, a także wszelkimi kolumnami partycji:
-
path (StringType): ścieżka pliku. -
modificationTime (TimestampType): czas modyfikacji pliku. W niektórych implementacjach systemu plików Hadoop ten parametr może być niedostępny, a wartość zostanie ustawiona na wartość domyślną. -
length (LongType): długość pliku w bajtach. -
content (BinaryType): zawartość pliku.
Usage
W poniższych przykładach pokazano ładowanie plików binarnych przy użyciu interfejsu API ramki danych platformy Spark i języka SQL, filtrowanie według typu pliku, wyświetlanie podglądów obrazów i zapisywanie w tabeli delty w celu zwiększenia wydajności odczytu.
Odczytywanie plików binarnych
Użyj interfejsu API ramki danych platformy Apache Spark, aby załadować pliki binarne do ramki danych na potrzeby przekształcania, wyświetlania lub przetwarzania podrzędnego.
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'
)
Konfigurowanie opcji odczytu
Aby załadować pliki ze ścieżkami pasującymi do danego wzorca globu przy zachowaniu zachowania odnajdywania partycji, możesz użyć pathGlobFilter opcji . Poniższy kod odczytuje wszystkie pliki JPG z katalogu wejściowego z odnajdywaniem partycji:
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'
)
Jeśli chcesz zignorować odnajdywanie partycji i cyklicznie przeszukiwać pliki w katalogu wejściowym recursiveFileLookup , użyj opcji . Ta opcja wyszukuje katalogi zagnieżdżone, nawet jeśli ich nazwy nie są zgodne ze schematem nazewnictwa partycji, takim jak date=2019-07-01.
Poniższy kod odczytuje wszystkie pliki JPG rekursywnie z katalogu wejściowego i ignoruje odnajdywanie partycji:
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
)
Ładowanie i wyświetlanie obrazów
Usługa Databricks zaleca użycie źródła danych pliku binarnego do załadowania danych obrazu. Funkcja Databricks display obsługuje wyświetlanie danych obrazów załadowanych przy użyciu binarnego źródła danych.
Jeśli wszystkie załadowane pliki mają nazwę pliku z rozszerzeniem obrazu, podgląd obrazu jest automatycznie włączony:
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'
)
Alternatywnie możesz wymusić funkcję podglądu obrazu, używając opcji mimeType z wartością ciągu "image/*", aby przypisać adnotację do kolumny binarnej. Obrazy są dekodowane w oparciu o informacje o formacie zawarte w zawartości binarnej. Obsługiwane typy obrazów to bmp, , gifjpegi png. Nieobsługiwane pliki są wyświetlane jako uszkodzona ikona obrazu.
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/*'
)
Zobacz Rozwiązanie referencyjne dla aplikacji obrazów dla zalecanego przepływu pracy do obsługi danych obrazów.
Zapisz do tabeli Delta
Aby zwiększyć wydajność odczytu podczas ładowania danych z powrotem, Azure Databricks zaleca zapisanie danych załadowanych z plików binarnych do tabeli delty.
Python
df.write.format("delta").saveAsTable("<catalog>.<schema>.<table>")
Scala
df.write.format("delta").saveAsTable("<catalog>.<schema>.<table>")
Dodatkowe zasoby
- Odczytywanie plików obrazów: jeśli obciążenie wymaga pól obrazów strukturalnych, takich jak wysokość, szerokość i dane kanału, a nie nieprzetworzone bajty, źródło danych obrazu udostępnia zdekodowany schemat.