Parquet dosyalarıyla çalışmak
CSV dosyaları, dikdörtgen veri nesnelerinin (R data.frame'leri ve Spark DataFrame'leri gibi) içeriğini diske kaydetmek için harikadır. Sorun şu ki, okumaları ve yazmaları gerçekten yavaştır; bu da onları büyük veri kümeleri için kullanışsız yapar. Parquet dosyaları daha yüksek performanslı bir alternatif sunar. Spark verilerinin yanı sıra, parquet dosyaları Hadoop ekosistemindeki diğer araçlarla da kullanılabilir: Shark, Impala, Hive ve Pig gibi.
Teknik olarak konuşursak, parquet dosyası ifadesi tam doğru değildir. Veriyi parquet formatında sakladığında aslında bir dizin dolusu dosya elde edersin. Veriler birden fazla .parquet dosyasına bölünür; bu sayede birden fazla makinede kolayca saklanabilir. Ayrıca her sütunun içeriğini tanımlayan bazı meta veri dosyaları da bulunur.
sparklyr, spark_read_parquet() kullanarak parquet dosyalarını içe aktarabilir. Bu fonksiyon bir Spark bağlantısı, oluşturulacak Spark DataFrame'inin adı olarak bir karakter dizisi ve parquet dizinine giden bir yol alır. Bu fonksiyonun veriyi doğrudan Spark'a aktaracağını unutma; bu genellikle önce veriyi R'a alıp sonra copy_to() ile R'dan Spark'a kopyalamaktan daha hızlıdır.
spark_read_parquet(sc, "a_dataset", "path/to/parquet/dir")
Bu egzersiz, kursun bir parçasıdır
R ile sparklyr kullanarak Spark’a Giriş
Egzersiz talimatları
Senin için spark_conn olarak bir Spark bağlantısı oluşturuldu. Parquet dizinine işaret eden bir karakter dizisi de (R'ın çalıştığı dosya sisteminde) parquet_dir olarak hazır.
- Parquet dizinindeki dosyaların tam (mutlak) dosya yollarını listelemek için
dir()kullan ve sonucufilenamesdeğişkenine ata.- İlk argüman, dosyalarını listelediğin dizin olmalı:
parquet_dir. - Göreli yerine mutlak dosya yollarını almak için
full.names = TRUEde geçir.
- İlk argüman, dosyalarını listelediğin dizin olmalı:
- İki sütunlu bir
data_frameoluştur.filename, az önce aldığın dosya adlarını dizin kısmı olmadan içermeli. Bunu dosya adlarınıbasename()fonksiyonuna vererek oluştur.size_bytes, bu dosyaların bayt cinsinden boyutlarını içermeli. Bunu dosya adlarınıfile.size()fonksiyonuna vererek oluştur.
- Timbre verisini Spark'a aktarmak için
spark_read_parquet()kullan ve sonucutimbre_tbldeğişkenine ata.- İlk argüman Spark bağlantısı olmalı.
- İkinci argüman
"timbre"olmalı. - Üçüncü argüman
parquet_dirolmalı.
Uygulamalı etkileşimli egzersiz
Bu egzersizi bu örnek kodu tamamlayarak deneyin.
# parquet_dir has been pre-defined
parquet_dir
# List the files in the parquet dir
filenames <- ___
# Show the filenames and their sizes
data_frame(
filename = ___,
size_bytes = ___
)
# Import the data into Spark
timbre_tbl <- ___