2017-09-04 1 views
0

Ich habe einige schwere Stämme auf meinem Cluster, habe ich alle von ihnen mit dem folgenden Partitionsschema parqueted:Wählen Parkett basierend auf Partition Datum

PARTITION_YEAR=2017/PARTITION_MONTH=07/PARTITION_DAY=12 

Zum Beispiel, wenn ich alle meine log auswählen möchten zwischen 2017/07/12 und 2017/08/10 gibt es eine Möglichkeit, es effektiv zu tun? Oder muss ich alle Tage durchlaufen, um die Partitionen einzeln zu lesen?

Danke,

+0

https://stackoverflow.com/questions/33650421/reading-dataframe-from-partitioned-parquet-file – pasha701

Antwort

2

können Sie einige reguläre Ausdrücke verwenden, wenn Dateien in pyspark Laden:

input_path = "PARTITION_YEAR=2017/PARTITION_MONTH=0{7/PARTITION_DAY={1[2-9],[2-3]*},8/PARTITION_DAY={0[1-9],10}}" 
df = spark.read.parquet(input_path) 

Sie auch eine Liste der durch Komma getrennte Pfade erzeugen:

input_path = ",".join(["PARTITION_YEAR=2017/PARTITION_MONTH=07/PARTITION_DAY=" + str(x) for x in range(12, 32)]) \ 
+ ",".join(["PARTITION_YEAR=2017/PARTITION_MONTH=08/PARTITION_DAY=" + str(x) for x in range(1, 11)]) 

oder mit Daten:

import datetime as dt 
d1 = dt.date(2017,7,12) 
d2 = dt.date(2017,8,10) 

date_list = [d1 + dt.timedelta(days=x) for x in range(0, (d2 - d1).days + 1)] 
input_path = ",".join(["PARTITION_YEAR=2017/PARTITION_MONTH=%02d/PARTITION_DAY=%02d" % (d.month, d.day) for d in date_list]) 
+0

Die Lösung mit Datumsangaben ist ziemlich cool, danke! :) –

Verwandte Themen