1

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 zu read.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.

Antwort

0

Nathan Marz, früher von Twitter und Autor des Lambda Architecture, beschreibt den Prozess der vertikale Partitionierung für Daten im Batch-Layer zu speichern, die die Quelle der Wahrheit ist, und enthält alle Daten, die Architektur je gesehen hat. Dieser Hauptdatensatz ist unveränderlich und nur anhängig. Vertikale Partitionierung ist nur ein fantastischer Name zum Sortieren der Daten in separate Ordner.

Das ist genau das, was Sie in Ihrer dritten Option beschreiben.

Dies führt zu erheblichen Leistungssteigerungen, da Funktionen im Hauptdatensatz nur auf die für die Berechnung relevanten Daten zugreifen. Dies macht Batch-Abfragen und das Erstellen von Indizes in der Serving-Schicht viel schneller. Die Namen der Ordner hängen von Ihnen ab, aber normalerweise ist eine Timestamp-Komponente beteiligt.

Unabhängig davon, ob Sie eine Lambda-Architektur erstellen oder nicht, die vertikale Partitionierung wird Ihre Analysen wesentlich effizienter machen.

+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? –

+0

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

Verwandte Themen