gespeichert Ich bin in einer Situation ähnlich wie the one mentioned here. Die Frage wird nicht befriedigend beantwortet. Außerdem habe ich weniger Daten zu handhaben (ungefähr 1G pro Tag).Hinzufügen von Daten zu Spark/Parkett Daten auf der Festplatte
Meine Situation: Ich habe eine bestimmte Menge an Daten (~ 500G) bereits als Parkett (das ist das "Speicherformat", das vereinbart wurde) und ich bekomme regelmäßig inkrementelle Updates. Ich möchte in der Lage sein, später sowohl den ETL-Teil als auch den Analytics-Teil zu bearbeiten.
Um in der Lage zu sein, zu produzieren effizient auch Updates auf bestimmte „Zwischendatenprodukte“, sehe ich drei Möglichkeiten:
- speichern mit Anfügemodus, ein diff-Datensatz herum, bis alle Daten halten Produkte wurden
- speichern mit Anfügemodus, Hinzufügen einer zusätzlichen Spalte
upload_timestamp
jedes Update auf eine separat speichern erstellt e-Ordner, z.B .:
data +- part_001 | +- various_files.parquet +- part_002 | +- various_files.parquet +- ...
Auf diese Weise der gesamte Datensatz gelesen werden kann
data/*
als Pfad zuread.parquet()
verwenden.
ich auf dem letzten Ansatz am neige, auch weil es Kommentare (Beweis?), Die Zufügen-Modus zu Problemen führt, wenn die Menge von Partitionen (siehe zum Beispiel this SO question) wächst.
Also meine Frage: gibt es einige gravierende Nachteile beim Erstellen einer Datensatzstruktur wie dieser? Offensichtlich muss Spark "etwas" zusammenführen/sortieren, wenn mehrere Ordner gelesen werden, aber abgesehen davon?
Ich benutze Spark 2.1.0.
gut, danke! beantwortet meine Frage allerdings nicht ganz. Die Frage war/ist vielmehr: Ist es ein Problem für Spark, wenn die Anzahl der Ordner (unter 'data /') groß wird? –
Ich habe die Frage beantwortet. Die kurze Antwort ist Nein; Die lange Antwort oben erklärt warum. Das Spark-Team ist sich bewusst, dass die Leute viele Daten haben und diese berücksichtigt haben. Der vertikale Partitionierungsansatz hilft, diese Analysen aus den angegebenen Gründen zu optimieren. – Vidya