CSV dosyalarını okuma ve yazma
Bu makalede Python, Scala, R ve SQL kullanarak Azure Databricks ile CSV dosyalarını okuma ve bu dosyalara yazma örnekleri verilmektedir.
Not
Databricks, SQL kullanıcılarının CSV dosyalarını okuması için tablo değerli read_files işlevini önerir. read_files
Databricks Runtime 13.3 LTS ve üzerinde kullanılabilir.
Geçici bir görünüm de kullanabilirsiniz. GEÇICI görünümler veya read_files
kullanmadan DOĞRUDAN CSV verilerini okumak için SQL kullanıyorsanız aşağıdaki sınırlamalar geçerlidir:
- Veri kaynağı seçeneklerini belirtemezsiniz.
- Verilerin şemasını belirtemezsiniz.
Seçenekler
CSV dosya veri kaynakları için çeşitli seçenekler yapılandırabilirsiniz. Desteklenen okuma ve yazma seçenekleri için aşağıdaki Apache Spark başvuru makalelerine bakın.
Hatalı biçimlendirilmiş CSV kayıtlarıyla çalışma
Belirtilen şemaya sahip CSV dosyalarını okurken, dosyalardaki verilerin şemayla eşleşmemesi mümkündür. Örneğin, şehir adını içeren bir alan tamsayı olarak ayrıştırılmaz. Bunun sonuçları, ayrıştırıcının çalıştığı moda bağlıdır:
PERMISSIVE
(varsayılan): Doğru ayrıştırılamayan alanlar için nulllar eklenirDROPMALFORMED
: ayrıştırılamayan alanlar içeren satırları bırakırFAILFAST
: Hatalı biçimlendirilmiş veriler bulunursa okumayı durdurur
Modu ayarlamak için seçeneğini kullanın mode
.
diamonds_df = (spark.read
.format("csv")
.option("mode", "PERMISSIVE")
.load("/databricks-datasets/Rdatasets/data-001/csv/ggplot2/diamonds.csv")
)
PERMISSIVE
Modda, aşağıdaki yöntemlerden birini kullanarak doğru ayrıştırılamayan satırları incelemek mümkündür:
- Bozuk kayıtları bir dosyaya kaydetme seçeneği
badRecordsPath
için özel bir yol sağlayabilirsiniz. - Sütunu DataFrameReader'a sağlanan şemaya ekleyerek
_corrupt_record
sonuçta elde edilen DataFrame'deki bozuk kayıtları gözden geçirebilirsiniz.
Not
seçeneği badRecordsPath
yerine _corrupt_record
önceliklidir. Bu, sağlanan yola yazılan hatalı biçimlendirilmiş satırların sonuçtaki DataFrame'de görünmediği anlamına gelir.
Kurtarılan veri sütunu kullanılırken hatalı biçimlendirilmiş kayıtlar için varsayılan davranış değişir.
Yanlış biçimlendirilmiş satırlar not defterini bulma
Kurtarılan veri sütunu
Not
Bu özellik Databricks Runtime 8.3 (desteklenmeyen) ve üzerinde desteklenir.
Modu kullanırken, bir kayıttaki PERMISSIVE
bir veya daha fazla alan aşağıdaki sorunlardan birine sahip olduğundan ayrıştırılmayan verileri yakalamak için kurtarılan veri sütununu etkinleştirebilirsiniz:
- Sağlanan şemada yok.
- Sağlanan şemanın veri türüyle eşleşmiyor.
- Sağlanan şemadaki alan adlarıyla büyük/küçük harf uyuşmazlığı var.
Kurtarılan veri sütunu, kurtarılan sütunları ve kaydın kaynak dosya yolunu içeren bir JSON belgesi olarak döndürülür. Kurtarılan veri sütunundan kaynak dosya yolunu kaldırmak için SQL yapılandırmasını spark.conf.set("spark.databricks.sql.rescuedDataColumn.filePath.enabled", "false")
ayarlayabilirsiniz. Ile gibi _rescued_data
spark.read.option("rescuedDataColumn", "_rescued_data").format("csv").load(<path>)
verileri okurken seçeneğini rescuedDataColumn
bir sütun adı olarak ayarlayarak kurtarılan veri sütununu etkinleştirebilirsiniz.
CSV ayrıştırıcısı kayıtları ayrıştırırken üç modu destekler: PERMISSIVE
, DROPMALFORMED
ve FAILFAST
. ile rescuedDataColumn
birlikte kullanıldığında, veri türü uyuşmazlıkları kayıtların modda DROPMALFORMED
bırakılmasına veya modda hata FAILFAST
oluşturmasına neden olmaz. Yalnızca bozuk kayıtlar (eksik veya hatalı biçimlendirilmiş CSV) bırakılır veya hata oluşturur.
rescuedDataColumn
Modda PERMISSIVE
kullanıldığında, bozuk kayıtlara aşağıdaki kurallar uygulanır:
- Dosyanın ilk satırı (üst bilgi satırı veya veri satırı) beklenen satır uzunluğunu ayarlar.
- Farklı sayıda sütuna sahip bir satır tamamlanmamış olarak kabul edilir.
- Veri türü uyuşmazlıkları bozuk kayıtlar olarak kabul edilmez.
- Yalnızca eksik ve hatalı biçimlendirilmiş CSV kayıtları bozuk olarak kabul edilir ve veya
badRecordsPath
sütununa_corrupt_record
kaydedilir.
SQL örneği: CSV dosyasını okuma
Aşağıdaki SQL örneği kullanarak read_files
bir CSV dosyasını okur.
-- mode "FAILFAST" aborts file parsing with a RuntimeException if malformed lines are encountered
SELECT * FROM read_files(
's3://<bucket>/<path>/<file>.csv',
format => 'csv',
header => true,
mode => 'FAILFAST')
Scala, R ve Python örnekleri: CSV dosyasını okuma
Aşağıdaki not defterinde Scala, R ve Python kullanarak dosya okuma, örnek verileri görüntüleme ve veri şemasını yazdırma gösterilmektedir. Bu bölümdeki örneklerde elmas veri kümesi kullanılmıştır. Veri kümesinin yolunu ve istediğiniz seçenekleri belirtin.
CSV dosyaları not defterini okuma
Örnek: Şema belirtme
CSV dosyasının şeması bilindiğinde, seçeneğiyle CSV okuyucusunun istediği şemayı schema
belirtebilirsiniz.
Şema not defteriyle CSV dosyalarını okuma
kullanan read_files
SQL örneği:
SELECT * FROM read_files(
's3://<bucket>/<path>/<file>.csv',
format => 'csv',
header => false,
schema => 'id string, date date, event_time timestamp')
Örnek: Sütunların bir alt kümesini okuma tuzakları
CSV ayrıştırıcısının davranışı, okunan sütun kümesine bağlıdır. Belirtilen şema yanlışsa, sonuçlar erişilen sütunların alt kümesine bağlı olarak önemli ölçüde farklılık gösterebilir. Aşağıdaki not defteri en yaygın tuzakları sunar.