2017-08-01 2 views
0

Wenn generating the parquet file aus den gleichen csv file der Dask erzeugte eine Parkett Datei mit vielen kleinen Dateien (über 200 Dateien mit einer Größe von 3 MB) und die R Sergeant 2 erzeugten .parquet Dateien mit 520 MB und 280 MB).
Wir haben versucht, mit dem row_group_offset Schlüsselwort zu verwenden, aber hatten keinen Erfolg. Unter Verwendung der partition_on in Dask hinzugefügt eine Reihe von Partitionen, aber in jeder Partition gibt es viele Unter .parquet Dateien (Hunderte oder sogar Tausende).Anzahl der Parkettunter Dateien

Wie können wir die Größe der Parkettdateien in Python und in R steuern?

Antwort

0

fastparquet, der Standard-Parkettschreiber für dask, erstellt mindestens eine Parkettdatei pro Eingabedatenblock oder mehr, wenn Sie partition_on oder row_group_offset verwenden - diese wirken auch einzeln auf die Eingabedatenblöcke. Die Anzahl der Chunks ist standardmäßig gleich der Anzahl der CSV-Dateien.

Um die Anzahl der Stücke zu verringern, müssen Sie Ihre Daten neu gemischt (dies kann teuer sein, und so nur, wenn explizite erforderliche getan), beispielsweise

df = df.repartition(npartitions=10) 

vor dem Schreiben. Außerdem können Sie das oben genannte mit force=True, falls erforderlich, versuchen.

Beachten Sie, dass es in vielen Fällen sinnvoll ist, diese Repartitions-/Rechenkombination in Kombination mit dem Setzen eines Indexes (set_index) und Semi-Sortierung der Daten durchzuführen, was eine bessere Leistung für spätere Abfragen ergibt.

+0

Vielen Dank für Ihre Antwort - Ich habe es geschafft, die Dateien neu zu partitionieren - Jetzt versuche ich zu verstehen, was die Überlegungen für die Größe der Partition sind. Die [Dokumentation in fastparquet] (https://fastparquet.readthedocs.io/en/latest/details.html#partitions-and-row-groups) erklärt nicht, was zu tun hat, wenn die Datei keine hohe Kardinalität hat . –

+0

Eine solche Sache hängt oft vom Anwendungsfall ab. Kleinere Partitionen auf einem Index, der für die Auswahl nützlich ist, oder ein kategorischer Bereich, in dem Sie wahrscheinlich nur einige Werte wünschen, führen dazu, dass nicht alle Daten gelesen werden müssen. aber größere Partitionen sind immer effizienter zu lesen. Stellen Sie sicher, dass die Partitionsgröße * im Speicher * immer viel kleiner als Arbeits-RAM ist, besonders für Parallel. Die HDFS-Blockgröße, typischerweise 128 MB, zielt auf diese Faustregel ab. – mdurant

Verwandte Themen