Böyle üç sütun değerleri tarafından bölümlenmiş, DataFrameWriter
kullanarak Parke formatında HDF'ler bir DataFrame
kurtarmaya çalışıyorum:Yeni veriler olmadan bölümleri silmeden Spark'de DataFrame nasıl bölümlenir ve yazılır?
dataFrame.write.mode(SaveMode.Overwrite).partitionBy("eventdate", "hour", "processtime").parquet(path)
, partitionBy
path
de bölümleri dolu varolan hiyerarşiyi silecektir ve bunları, dataFrame
numaralı bölümlerle değiştirdiler. Belirli bir güne ait yeni artımlı veriler periyodik olarak geleceğinden, istediklerim yalnızca hiyerarşideki bölümleri değiştirmektir, bu nedenle dataFrame
'un verileri el değmeden bırakılır.
singlePartition.write.mode(SaveMode.Overwrite).parquet(path + "/eventdate=2017-01-01/hour=0/processtime=1234567890")
Ancak sorun tek bölüm halinde verileri düzenlemek için en iyi yolu anlama yaşıyorum DataFrame
s, böylece onları tam yollarını kullanarak yazabilirim.
dataFrame.repartition("eventdate", "hour", "processtime").foreachPartition ...
Ama foreachPartition
Parke biçimine dışarı yazma için ideal değildir bir Iterator[Row]
çalışır: Bir fikir bir şey gibiydi.
Ayrıca bölümlerin listesini almak ve daha sonra bu bölümlerin her biri tarafından özgün veri çerçevesini filtrelemek ve sonuçları tam bölümlenmiş yollarına kaydetmek için bir select...distinct eventdate, hour, processtime
kullanmayı düşündüm. Ancak, her bir bölüm için ayrı bir sorgu ve bir filtre, çok fazla filtre/yazma işlemi olacağından çok verimli görünmüyor.
dataFrame
'un veri içermediği mevcut bölümleri korumanın daha temiz bir yolu var mıdır?
Okumak için teşekkürler.
Spark sürümü: 2.1
sen test ettin Eski bölümün yerini iki kez veri? Testimden, aslında bölüm dizininde verilerin ikiye katlanmasına neden olan yeni bir parke dosyası oluşturuyor. Kıvılcım 2.2'deyim. – suriyanto