FileType

Berlaku untuk:check ditandai ya Databricks Runtime 18 LTS ke atas

Important

Fitur ini ada di Beta. Admin ruang kerja dapat mengontrol akses ke fitur ini dari halaman Pratinjau . Lihat Kelola Pratinjau Azure Databricks.

FileType adalah tipe PySpark untuk tipe SQL FILE , sebuah referensi ke file tidak terstruktur dan metadatanya. Gunakan untuk mendeklarasikan FILE parameter dan tipe pengembalian dalam fungsi yang didefinisikan pengguna (UDF) Python. Dalam Python, FILE nilai adalah objek FileRef yang menyimpan metadata file dan membaca byte-nya.

Untuk referensi tipe SQL dan gambaran konseptual, lihat FILE tipe dan tipe FILE serta data tidak terstruktur. Untuk contoh UDF pemrosesan file, lihat Proses file dengan UDF.

Catatan

Tipe ini FILE tidak didukung pada notebook serverless. Ini didukung pada notebook yang terhubung ke gudang SQL Databricks tanpa server.

Import

from pyspark.sql.types import FileType, FileRef

FileType

FileType adalah subkelas pyspark.sql.types.DataType. Gunakan sebagai parameter atau tipe return dari UDF, atau sebagai tipe field dalam skema.

FileType tidak menentukan MANAGED atau EXTERNAL. Kualifikasi tersebut hanya berlaku untuk FILE kolom tabel, di mana kolom menentukan apakah referensi disimpan sebagai terkelola atau eksternal. UDF mengirimkan dan mengembalikan FILE referensi, dan kolom target menentukan bagaimana setiap referensi disimpan saat Anda menulis hasil ke tabel.

Anda dapat menggunakannya FileType dengan cara berikut, yang juga berlaku untuk UDF SQL dan Scala serta prosedur tersimpan SQL:

  • Sebagai tipe tingkat atas.
  • Bersarang di dalam atau StructType .ArrayType
  • Sebagai tipe nilai dari , MapTypetetapi bukan sebagai MapType kunci.
  • Di dalam , VariantTypetapi hanya untuk file eksternal.

Ketika sebuah kueri mengembalikan FILE kolom ke Python, baik di dalam UDF maupun melalui DataFrame.collect(), setiap nilai adalah .FileRef

FileRef

A FileRef adalah nilai Python untuk .FILE Perangkat ini menyimpan metadata file dan memiliki metode untuk membaca byte file serta membuat referensi baru.

Atribut

Attribute Tipe Description
uri str URI dari file. Selalu siap.
offset int Offset ke dalam file, dalam byte.
size int Ukuran file dalam satuan byte.
content_type str Jenis MIME dari file, jika diketahui.
checksum str Token integritas untuk byte file, berbentuk <algorithm>:<digest>. Untuk algoritma yang diakui, lihat Checksums.

Methods

Metode Description
as_local_file() Mengembalikan a pathlib.Path ke file. Teruskan hasilnya ke pustaka mana pun yang menerima jalur. Tersedia di Azure Databricks compute (notebook dan pekerja UDF). Tidak tersedia pada klien Databricks Connect, seperti IDE atau aplikasi lokal yang menjalankan kode Anda di luar komputasi Azure Databricks.
open() Membuka file untuk pembacaan biner dan mengembalikan objek file. Penelepon menutupnya. Memiliki persyaratan komputasi yang sama dengan as_local_file().
from_bytes(content, path=None, content_type=None) Metode kelas. Mengunggah content (sebuah bytes nilai) ke jalur volume Unity Catalog yang diberikan oleh path dan mengembalikan .FileRef Gagal jika file sudah ada di jalur target. Hanya didukung di dalam UDF.
from_local_file(local_file, path=None, content_type=None) Metode kelas. Mengunggah file lokal ke volume Unity Catalog dan mengembalikan .FileRef Parameter dan berperilaku path seperti dalam content_type.from_bytes Hanya didukung di dalam UDF.

Example

Dalam kode berikut, UDF skalar menerima FILE nilai sebagai FileRef, membuka gambar, dan mengembalikan dimensinya:

from pyspark.sql.functions import col, udf
from pyspark.sql.types import StringType
from PIL import Image

@udf(returnType=StringType())
def image_resolution(file):
    with Image.open(file.as_local_file()) as img:
        return f"{img.width}x{img.height}"

spark.read.table("images").select(image_resolution(col("photo"))).display()

Untuk contoh UDF pemrosesan file lainnya, termasuk menghasilkan file dengan UDTF, lihat Proses file dengan UDF. Untuk pembuatan UDF umum, lihat fungsi user-defined Python scalar (UDF) dan Python user-defined table functions (UDTFs).

Keterbatasan

Penggunaan FileType di PySpark memiliki keterbatasan sebagai berikut:

  • PySpark tidak mendukung deklarasi FILE MANAGED atau FILE EXTERNAL tabel kolom atau pengingkapan file secara massal. Gunakan SQL untuk operasi tersebut. PySpark hanya mendukung FILE, as FileType, dalam UDF dan pembacaan file.
  • as_local_file() dan open() memerlukan akses sisi kluster, sehingga tidak tersedia di klien Databricks Connect . Panggil mereka dalam UDF atau komputasi cluster sebagai gantinya.
  • Untuk from_bytes dan from_local_file, UDF Python menyimpulkan content_type dari ekstensi jalur, sedangkan UDF Scala menyimpulkannya dari byte ajaib file.
  • Mengembalikan dari FileRef UDF yang menulis ke FILE MANAGED kolom tidak didukung.