2015-05-20 9 views
6

Her RDD bölümünü, kendi dizini ile parke dosyasını ayırmak için yazmak istediğim adımlarla mücadele ediyorum. Örnek olacak: bu biçiminRDD bölümlerini kendi dizinindeki bağımsız parke dosyalarına yazmak

<root> 
     <entity=entity1> 
      <year=2015> 
       <week=45> 
        data_file.parquet 

Avantajı ben sütun olarak SparkSQL bu doğrudan kullanabilir ve ben gerçek dosyasında bu veriler tekrar etmek zorunda kalmazsınız. Bu, ayrı bölümleme meta verileri başka bir yere depolamadan belirli bölüme ulaşmak için iyi bir yol olurdu.

Önceki adım olarak, çok sayıda gzip dosyasından yüklenen ve yukarıdaki tuşlara göre bölümlenmiş tüm verilere sahibim.

Her bölmeyi ayrı bir RDD olarak almak ve sonra yazmak için iyi bir yol bulamadığım halde yazabilirim.

Herhangi bir yardım için teşekkür ederiz. Bu arada bu yığına yeniyim.

cevap

2

Kaydetmek istediğiniz RDD'ye foreachPartition(f: Iterator[T] => Unit) numaralı telefonu arayarak mümkün olduğunu düşünüyorum.

işlevi Eğer foreachPartition içine Resim:
  1. recordWriter her bir çizgi sokulmasıyla bir ParquetWriter
  2. çekme kanalında hdfs://localhost:9000/parquet_data/year=x/week=y
  3. yineleyici hazırlayın.
  4. Kabul cevabı uygun sorunun cevabının sanmıyorum
+0

Cevabınız için teşekkürler. Kavramsal olarak cevabınızı anlıyorum ve uygulamaya çalıştım ama ParquetRecord yazarı oluşturmanın yolunu bulamadım mı? Scala'daki herhangi bir kod örneği son derece faydalı olacaktır. –

+0

@RajeevPrasad, cevabı bir parke yazar örneğiyle düzenledim, nasıl çalıştığını görmek için lütfen ilgili src kodunu kontrol edin :) –

+0

Yardımlarınız için teşekkürler. Bu iyi çalışıyor. Bu uygulamanın performansının, saveAsParquetFile kullanılarak doğrudan yazılmaya kıyasla ne olacağını biliyor musunuz? –

42

temizlemek. Böyle

deneyin şey:

df.write.partitionBy("year", "month", "day").parquet("/path/to/output") 

Ve bölümlenmiş dizin yapısını alacak.

+0

Kabul et, bu kabul edilen cevap olmalı. –

+0

Evet, bu cevap daha basit ve geleceğe yöneliktir. – Sim

İlgili konular