Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
notebookutils.fs Azure Data Lake Storage (ADLS) 2. Nesil ve Azure Blob Depolama gibi çeşitli dosya sistemleriyle çalışmaya yönelik yardımcı programlar sağlar. Azure Data Lake Storage 2. Nesil ve Azure Blob Depolama erişimini uygun şekilde yapılandırdığınızdan emin olun.
Kullanılabilir yöntemlere genel bakış için aşağıdaki komutları çalıştırın:
notebookutils.fs.help()
Aşağıdaki tabloda kullanılabilir dosya sistemi yöntemleri listelemektedir:
| Yöntem | Signature | Açıklama |
|---|---|---|
ls |
ls(path: String): Array |
Bir dizinin içeriğini listeler. |
mkdirs |
mkdirs(path: String): Boolean |
Mevcut değilse verilen dizini oluşturur ve ayrıca gerekli üst dizinleri oluşturur. |
cp |
cp(src: String, dest: String, recurse: Boolean = false): Boolean |
Büyük olasılıkla dosya sistemleri arasında bir dosya veya dizin kopyalar. |
fastcp |
fastcp(src: String, dest: String, recurse: Boolean = true, extraConfigs: Map = None): Boolean |
Büyük veri birimleriyle daha iyi performans için azcopy aracılığıyla bir dosya veya dizin kopyalar. |
mv |
mv(src: String, dest: String, create_path: Boolean, overwrite: Boolean = false): Boolean |
Bir dosyayı veya dizini büyük olasılıkla dosya sistemleri arasında taşır. |
put |
put(file: String, content: String, overwrite: Boolean = false): Boolean |
Verilen dizeyi UTF-8 ile kodlanmış bir dosyaya yazar. |
head |
head(file: String, max_bytes: int = 1024 * 100): String |
Verilen dosyanın ilk max_bytes baytlarına kadar UTF-8'de kodlanmış bir Dize olarak döndürür. |
append |
append(file: String, content: String, createFileIfNotExists: Boolean = false): Boolean |
İçeriği bir dosyaya ekler. |
rm |
rm(path: String, recurse: Boolean = false): Boolean |
Bir dosyayı veya dizini kaldırır. |
exists |
exists(path: String): Boolean |
Bir dosya veya dizin olup olmadığını denetler. |
getProperties |
getProperties(path: String): Map |
Verilen yolun özelliklerini alır. Yalnızca Python not defterlerinde kullanılabilir (PySpark, Scala veya R'de desteklenmez). |
Uyarı
Aksi belirtilmediği sürece tüm dosya sistemi yöntemleri Python, PySpark, Scala ve R not defterlerinde kullanılabilir. Scala, camelCase parametre adlarını kullanır (örneğin, createPath yerine create_pathmaxBytesyerine max_bytes ).
Bağlama ve çıkarma işlemleri için bkz. Dosya bağlama ve çıkarma.
Uyarı
ile notebookutils.fsçalışırken aşağıdaki kısıtlamaları ve dikkate alınacak noktaları göz önünde bulundurun:
-
Yol davranışı not defteri türüne göre değişir: Spark not defterlerinde göreli yollar varsayılan Lakehouse ABFSS yoluna çözümlenmektedir. Python not defterlerinde göreli yollar yerel dosya sistemi çalışma dizinine (
/home/trusted-service-user/work) çözümür. -
Eşzamanlı yazma sınırlamaları:
notebookutils.fs.append()venotebookutils.fs.put()atomiklik garantilerinin olmaması nedeniyle aynı dosyaya eşzamanlı yazmaları desteklemez. -
Ekleme döngüsü gecikmesi: Döngüleri kullanırken
notebookutils.fs.append(), veri bütünlüğü için yazma işlemleri arasına 0,5-1 saniyelik uyku ekleyin. -
OneLake kısayol sınırlamaları: S3/GCS türü kısayolları için,
cp()vefastcp()işlemlerinde ABFS yolları yerine bağlı yolları kullanın. -
Bölgeler arası sınırlamalar:
fastcp()OneLake'teki dosyaların bölgeler arasında kopyalanmasını desteklemez. Bunun yerinecp()kullanın. - Çalışma zamanı sürümü: NotebookUtils, Spark 3.4 (Runtime v1.2) ve üzeri sürümlerle çalışacak şekilde tasarlanmıştır.
-
cp()davranışı Python not defterlerinde:cp(), dahili olarakfastcp()ile aynı azcopy tabanlı mekanizmayı kullanır, böylece her iki yöntem de aynı şekilde davranır.
NotebookUtils, dosya sistemiyle Spark API'leriyle aynı şekilde çalışır. Örneğin, notebookutils.fs.mkdirs() ve Lakehouse kullanımını ele alalım:
| Kullanım | HDFS kök dizininden göreli yol | ABFS dosya sistemi için mutlak yol | Sürücü düğümünde yer alan yerel dosya sistemi için mutlak yol |
|---|---|---|---|
| Varsayılan olmayan Lakehouse | Desteklenmiyor | notebookutils.fs.mkdirs("abfss://<container_name>@<storage_account_name>.dfs.core.windows.net/<new_dir>") |
notebookutils.fs.mkdirs("file:/<new_dir>") |
| Varsayılan Lakehouse | 'Dosyalar' veya 'Tablolar' altındaki dizin: notebookutils.fs.mkdirs("Files/<new_dir>") |
notebookutils.fs.mkdirs("abfss://<container_name>@<storage_account_name>.dfs.core.windows.net/<new_dir>") |
notebookutils.fs.mkdirs("file:/<new_dir>") |
Varsayılan Lakehouse için, dosya yolları not defterinize 120 saniyelik varsayılan dosya önbelleği zaman aşımı ile bağlanır. Bu, dosyaların Lakehouse'dan kaldırılsalar bile not defterinin yerel geçici klasöründe 120 saniye boyunca önbelleğe alındığı anlamına gelir. Zaman aşımı kuralını değiştirmek istiyorsanız, varsayılan Lakehouse dosya yollarını kaldırarak ve farklı bir
fileCacheTimeoutdeğeriyle yeniden bağlayarak bunu yapabilirsiniz.Varsayılan olmayan Lakehouse yapılandırmaları için, Lakehouse yollarının montajı sırasında uygun
fileCacheTimeoutparametreyi ayarlayabilirsiniz. Zaman aşımının 0 olarak ayarlanması, en son dosyanın Lakehouse sunucusundan getirildiğinden emin olur.
Dosyaları listeleme
Bir dizinin içeriğini listelemek için kullanın notebookutils.fs.ls('Your directory path'). Örneğin:
notebookutils.fs.ls("Files/tmp") # Relative path works with different base paths depending on notebook type
notebookutils.fs.ls("abfss://<container_name>@<storage_account_name>.dfs.core.windows.net/<path>") # Absolute path using ABFS file system
notebookutils.fs.ls("file:/tmp") # Full path of the local file system of driver node
notebookutils.fs.ls() API, not defterinin türüne bağlı olarak göreli yol kullanırken farklı davranır.
Spark defteri: Göreceli yol, varsayılan Lakehouse'un ABFSS yoluna göre ayarlanmıştır. Örneğin,
notebookutils.fs.ls("Files")varsayılan Lakehouse'daFilesdizinine işaret eder.Örneğin:
notebookutils.fs.ls("Files/sample_datasets/public_holidays.parquet")Python not defterinde: Göreli yol, yerel dosya sisteminin çalışma dizinine göredir ve varsayılan olarak olur
/home/trusted-service-user/work. Bu nedenle, varsayılan Lakehouse'dakinotebookutils.fs.ls("/lakehouse/default/Files")dizinine erişmek için göreli yolFilesyerine tam yolu kullanmanız gerekir.Örneğin:
notebookutils.fs.ls("/lakehouse/default/Files/sample_datasets/public_holidays.parquet")
Dosya özelliklerini görüntüleme
Dosya adı, dosya yolu, dosya boyutu ve bir öğenin dosya veya dizin olup olmadığı gibi dosya özelliklerini incelemek için kullanın notebookutils.fs.ls() .
files = notebookutils.fs.ls('Your directory path')
for file in files:
print(file.name, file.isDir, file.isFile, file.path, file.size)
Daha okunabilir bir çıkış istiyorsanız f dizelerini kullanın:
files = notebookutils.fs.ls("Files/data")
for file in files:
print(f"Name: {file.name}, Size: {file.size}, IsDir: {file.isDir}, Path: {file.path}")
Yeni dizin oluşturma
Gerekli üst dizinler de dahil olmak üzere yoksa bir dizin oluşturun.
notebookutils.fs.mkdirs('new directory name')
notebookutils.fs.mkdirs("Files/<new_dir>") # Works with the default Lakehouse files using relative path
notebookutils.fs.mkdirs("abfss://<container_name>@<storage_account_name>.dfs.core.windows.net/<new_dir>") # Based on ABFS file system
notebookutils.fs.mkdirs("file:/<new_dir>") # Based on local file system of driver node
Dosyayı kopyalama
Dosya sistemleri arasında bir dosya veya dizin kopyalayın. Dizinleri özyinelemeli olarak kopyalamak için ayarlayın recurse=True .
notebookutils.fs.cp('source file or directory', 'destination file or directory', recurse=True)
Uyarı
Python not defteri notu: Python not defterlerinde cp() dahili olarak fastcp() ile aynı azcopy tabanlı mekanizmayı kullanır ve her iki yöntem için de verimli performans sağlar.
OneLake kısayolunun sınırlamaları nedeniyle, S3/GCS türü kısayolundan veri kopyalamak için kullanmanız gerektiğinde, abfss yolu yerine bağlı bir yol kullanmanız önerilir.
Tavsiye
İşlemin başarılı olup olmadığını doğrulamak için her zaman Boole dönüş değerini denetleyin. Kopyalama işlemini başlatmadan önce kaynak yolu doğrulamak için kullanın notebookutils.fs.exists() .
Aşağıdaki örnekte, varsayılan Lakehouse'dan ADLS 2. Nesil hesabına çapraz depolama kopyası gösterilmektedir:
notebookutils.fs.cp(
"Files/local_data",
"abfss://<container>@<account>.dfs.core.windows.net/remote_data",
recurse=True
)
Verimli kopyalama dosyası
Özellikle büyük veri hacimlerinde daha verimli kopyalama işlemleri için kullanın fastcp .
recurse parametresi varsayılan olarak değeridirTrue.
notebookutils.fs.fastcp('source file or directory', 'destination file or directory', recurse=True)
Tavsiye
Büyük veri aktarımları fastcp() yerine kullanıncp().
fastcp yöntemi, toplu dosya işlemleri için önemli ölçüde daha iyi aktarım hızı sağlayan arka planda azcopy kullanır. Python not defterlerinde hem cp() hem de fastcp() aynı temel mekanizmayı kullanır.
Şu noktaları göz önünde bulundurun:
-
notebookutils.fs.fastcp(), OneLake'teki dosyaların bölgeler arasında kopyalanmasını desteklemez. Bu durumda, bunun yerine kullanabilirsiniznotebookutils.fs.cp(). - OneLake kısayolunun sınırlamaları nedeniyle, S3/GCS türü kısayolundan veri kopyalamak için kullanmanız gerektiğinde, abfss yolu yerine bağlı bir yol kullanmanız önerilir.
Dosya içeriğini önizleme
Dosyanın ilk max_bytes baytlarına UTF-8 dizesi olarak geri dönün.
notebookutils.fs.head('file path', max_bytes)
Tavsiye
Büyük dosyalar için, bellek sorunlarını önlemek amacıyla head()'ü uygun bir max_bytes değeriyle kullanın. Varsayılan değer 100 KB'tır (1024 * 100).
Aşağıdaki örnek bir dosyanın ilk 1.000 baytını okur:
content = notebookutils.fs.head("Files/data/sample.txt", 1000)
print(content)
Uyarı
için max_bytes varsayılan değer farklı dillerde farklılık gösterir: Python ve Scala not defterleri 102400 (100 KB), R not defterleri ise (64 KB) kullanır 65535 . Scala'da bu parametre olarak adlandırılır maxBytes.
Dosyayı taşıma
Bir dosyayı veya dizini dosya sistemleri arasında taşıma.
notebookutils.fs.mv('source file or directory', 'destination directory', create_path=True, overwrite=True)
Önemli
Parametre varsayılanı create_path çalışma zamanına göre değişir:
-
Spark not defterleri (PySpark, Scala, R): varsayılan olarak
False(falseScala'da,FALSER'de). Taşıma işleminden önce üst dizin mevcut olmalıdır. -
Python not defterleri: varsayılan olarak
True. Ana dizin yoksa otomatik olarak oluşturulur.
Çalışma zamanları arasında tutarlı bir davranış sağlamak için, parametresini create_path kodunuzda açıkça ayarlayın. Scala'da bu parametre olarak adlandırılır createPath.
Daha net bir kod istiyorsanız adlandırılmış parametreleri kullanın:
notebookutils.fs.mv("Files/source.csv", "Files/new_folder/dest.csv", create_path=True, overwrite=True)
Dosya yazma
Dosyaya UTF-8 dizesi yazın.
notebookutils.fs.put("file path", "content to write", True) # Set the last parameter as True to overwrite the file if it already exists
Dosyaya içerik ekleme
Dosyaya UTF-8 dizesi ekleyin.
notebookutils.fs.append("file path", "content to append", True) # Set the last parameter as True to create the file if it doesn't exist
Önemli
notebookutils.fs.append() ve notebookutils.fs.put() bölünmezlik garantilerinin olmaması nedeniyle aynı dosyaya eşzamanlı yazmayı desteklemez.
API'yi aynı dosyaya yazmak için bir notebookutils.fs.append döngüsünde kullanırken, yinelenen yazma işlemleri arasında yaklaşık 0,5 ila 1 saniyelik bir for komutu ekleyin. Bu önerinin nedeni, notebookutils.fs.append API'sinin iç flush işleminin zaman uyumsuz olmasıdır, bu nedenle kısa bir gecikme veri bütünlüğünü sağlamaya yardımcı olur.
import time
for i in range(100):
notebookutils.fs.append("Files/output/data.txt", f"Line {i}\n", True)
time.sleep(0.5) # Prevent data integrity issues
Dosya veya dizin silme
Bir dosyayı veya dizini kaldırın. Dizinleri özyinelemeli olarak kaldırmak için ayarlayın recurse=True .
notebookutils.fs.rm('file path', recurse=True)
Dosya veya dizin olup olmadığını denetleme
Belirtilen yolda bir dosya veya dizin olup olmadığını denetleyin. Yol varsa döndürür True ; aksi takdirde döndürür False.
notebookutils.fs.exists("Files/data/input.csv")
Tavsiye
Hataları önlemek için dosya işlemlerini gerçekleştirmeden önce kullanın exists() . Örneğin, kopyalamaya veya taşımaya çalışmadan önce kaynak dosyanın mevcut olup olmadığını denetleyin.
if notebookutils.fs.exists("Files/data/input.csv"):
notebookutils.fs.cp("Files/data/input.csv", "Files/backup/input.csv")
print("File copied successfully.")
else:
print("Source file not found.")
Dosya özelliklerini alma
Yol için özellikleri isim-değer çiftleri haritası olarak alın. Yalnızca Azure Blob Depolama yolları için desteklenir.
Uyarı
getProperties yöntemi yalnızca Python not defterlerinde kullanılabilir. Spark not defterlerinde (PySpark, Scala veya R) desteklenmez.
Parametreler:
| Parametre | Türü | Zorunlu | Açıklama |
|---|---|---|---|
path |
Dize | Evet | Dosya veya dizinin ABFS yolu. |
Döndürür: Dosya boyutu, oluşturma zamanı, son değiştirme zamanı ve içerik türü gibi meta veri özelliklerini içeren bir sözlük (harita).
properties = notebookutils.fs.getProperties("abfss://<container_name>@<storage_account_name>.dfs.core.windows.net/<path>")
print(properties)