Direkt zum Inhalt

Apache Parquet Erklärt: Ein Leitfaden für Datenexperten

Dieses ausführliche Handbuch zu Apache Parquet enthält klare Erklärungen und praktische Codebeispiele!
Aktualisierte 11. Feb. 2025  · 20 Min. Lesezeit

Big Data kann überwältigend sein - wir haben oft das Gefühl, dass es keinen einfachen Weg gibt, damit umzugehen. Aber in Wirklichkeit macht Apache Parquet dies so viel einfacher. Es ist ein intelligentes Datenspeicherformat, das große Datenmengen verarbeitet und dir Zeit und Ressourcen spart. 

In diesem Artikel erkläre ich dir, was Parkett zu einem einzigartigen Werkzeug macht und wie du es in deinen Projekten einsetzen kannst. Am Ende wirst du wissen, warum es die erste Wahl für Datenexperten ist und wie du es mit Tools wie Python und Spark einsetzen kannst.

Was ist Apache Parquet?

Apache Parquet ist ein Open-Source-Spalten-Speicherformat, das die Herausforderungen der Big Data-Verarbeitung angeht. Im Gegensatz zur traditionellen zeilenbasierten Speicherung werden die Daten in Spalten organisiert. Diese Struktur ermöglicht es dir, nur die notwendigen Spalten zu lesen, was Datenabfragen schneller macht und den Ressourcenverbrauch reduziert.

So kannst du zum Beispiel gezielt die relevanten Daten suchen, anstatt einen ganzen Datensatz zu verarbeiten, um ein einzelnes Attribut zu finden. Das ist einer der Hauptgründe (neben vielen anderen, wie wir später sehen werden), warum Parquet eine natürliche Ergänzung für Big Data-Frameworks wie Apache Hadoop, Apache Spark und Apache Hive ist.  

Neben Frameworks wird Parquet auch häufig in Data Lakes und Analyseplattformen eingesetzt. Teams nutzen Amazon S3, Azure Data Lake Storage oder Google Cloud Storage, um große Datenmengen in einem Data Lake zu speichern. Da Parquet für effiziente Abfragen optimiert ist, ist es ein bevorzugtes Format für die Speicherung strukturierter und halbstrukturierter Daten.

Ein typischer Arbeitsablauf in Amazon S3 könnte zum Beispiel darin bestehen, AWS Glue zum Katalogisieren von Parquet-Dateien und Amazon Athena zum Ausführen von SQL-Abfragen zu verwenden, ohne Daten in eine Datenbank zu laden.

Werde Dateningenieur

Werde ein Dateningenieur durch fortgeschrittenes Python-Lernen
Kostenloses Lernen beginnen

Eigenschaften von Apache Parkett

Lass uns die Architektur von Apache Parquet mit seinen wichtigsten Funktionen verstehen: 

Säulenförmige Lagerung

Anders als zeilenbasierte Formate wie CSV organisiert Parquet die Daten in Spalten. Das bedeutet, dass bei einer Abfrage nur die benötigten Spalten abgefragt werden, anstatt alles zu laden. Das verbessert die Leistung und reduziert die E/A-Nutzung.

Zeilen- oder spaltenbasierte Struktur.

Zeilen- vs. spaltenbasierte Struktur. Bild vom Autor.

Parquet-Dateien sind in Zeilengruppen aufgeteilt, die einen Stapel von Zeilen enthalten. Jede Zeilengruppe ist in Spaltenblöcke unterteilt, die jeweils Daten für eine Spalte enthalten. Diese Chunks werden in kleinere Teile, die sogenannten Seiten, unterteilt, die komprimiert werden, um Platz zu sparen.

Außerdem speichern Parquet-Dateien zusätzliche Informationen in der Fußzeile, die so genannten Metadaten, die nur die Daten finden und lesen, die wir brauchen. 

Hier siehst du, wie die Struktur aussieht:

Interne Struktur der Parque-Datei.

Interne Struktur der Parkettdatei. Bild vom Autor. 

Lass uns die einzelnen Komponenten im obigen Diagramm aufschlüsseln.

Zeilengruppen

  • Eine Zeilengruppe enthält mehrere Zeilen, speichert die Daten aber spaltenweise, damit sie effizient gelesen werden können.
  • Beispiel: Ein Datensatz mit 1 Million Zeilen kann in 10 Gruppen mit jeweils 100.000 Zeilen aufgeteilt werden.

Spalten-Brocken

  • Innerhalb jeder Zeilengruppe sind die Daten durch Spalten getrennt.
  • Dieses Design ermöglicht ein spaltenbasiertes Pruning, bei dem wir nur die relevanten Spalten lesen können, anstatt die gesamte Datei zu durchsuchen.

Seiten

  • Jeder Spaltenchunk wird in Seiten aufgeteilt, um die Speichernutzung zu optimieren.
  • Die Seiten werden in der Regel komprimiert, was die Speicherkosten senkt.

Fußzeile (Metadaten)

  • Die Fußzeile am Ende einer Parquet-Datei enthält Indexinformationen:
    • Schema: Definiert Datentypen und Spaltennamen.
    • Versatz der Zeilengruppen: Hilft, bestimmte Daten schnell zu finden.
    • Statistik: Min-/Max-Werte, um den Prädikats-Pushdown (Filterung auf Speicherebene) zu aktivieren.

Komprimierung und Kodierung

Wie bereits erwähnt, komprimiert Parquet die Daten spaltenweise mit Kompressionsmethoden wie Snappy und Gzip. Außerdem werden zwei Kodierungstechniken verwendet:

  • Lauflängenkodierung um wiederholte Werte kompakt zu speichern.
  • Wörterbuch-Kodierung um Duplikate durch Wörterbuchreferenzen zu ersetzen.

Das reduziert die Dateigröße und beschleunigt das Lesen der Daten, was besonders hilfreich ist, wenn du mit großen Daten arbeitest.

Schema-Entwicklung

Schemaentwicklung bedeutet, dass die Struktur von Datensätzen geändert wird, z. B. durch Hinzufügen oder Ändern von Spalten. Es mag einfach klingen, aber je nachdem, wie deine Daten gespeichert sind, kann die Änderung des Schemas langsam und ressourcenintensiv sein. 

Um das zu verstehen, vergleichen wir die Entwicklung des CSV- und des Parkett-Schemas.

Angenommen, du hast eine CSV Datei mit Spalten wie student_id, student_name und student_age. Wenn du eine neue Spalte scores hinzufügen möchtest, musst du Folgendes tun:

  1. Lies die gesamte Datei in den Speicher.
  2. Aktualisiere die Kopfzeile und füge eine neue Spalte hinzu: scores.
  3. Füge für jeden Schüler eine Punktzahl hinzu. Das bedeutet, dass du die Werte für alle Zeilen anfügst (auch wenn sie fehlen, brauchst du vielleicht Platzhalter wie leere Strings oder NULL).
  4. Speichere alles als neue CSV-Datei.

CSV ist ein einfaches textbasiertes Format ohne integrierte Schemaunterstützung. Das bedeutet, dass bei jeder Änderung der Struktur die gesamte Datei neu geschrieben werden muss. Ältere Systeme, die die geänderte Datei lesen, könnten dann abbrechen, wenn sie eine andere Struktur erwarten!

Mit Parquet kannst du Felder hinzufügen, entfernen oder aktualisieren, ohne deine bestehenden Dateien zu zerstören. Wie wir bereits gesehen haben, speichert Parquet die Schemainformationen in der Fußzeile der Datei (Metadaten), sodass Schemata weiterentwickelt werden können, ohne dass bestehende Dateien verändert werden müssen.

So funktioniert es:

  • Wenn du eine neue Spalte hinzufügst, bleiben die bestehenden Parkettdateien unverändert.
  • Neue Dateien werden die zusätzliche Spalte enthalten, während alte Dateien weiterhin dem vorherigen Schema folgen.
  • Wenn du eine Spalte entfernst, musst du die vorherigen Daten nicht erneut verarbeiten; die Abfragen ignorieren die fehlende Spalte.
  • Wenn eine Spalte in einer älteren Datei nicht existiert, geben Parquet-Engines (wie Apache Spark, Hive oder BigQuery) NULL zurück, anstatt die Abfrage abzubrechen.
  • Ältere Parquet-Dateien können auch nach Schemaänderungen gelesen werden.
  • Neuere Parquet-Dateien mit zusätzlichen Spalten können auch von Systemen gelesen werden, die ein älteres Schema erwarten.

Hinzufügen einer Spalte zur Parquet-Datei, ohne sie zu zerstören.

Hinzufügen einer Spalte zur Parkettdatei, ohne sie zu zerstören. Bild vom Autor.

Unterstützung von Sprachen und Plattformen

Parquet unterstützt verschiedene Programmiersprachen, wie Java, Python, C++ und Rust. Das bedeutet, dass Entwickler es unabhängig von ihrer Plattform einfach nutzen können. Außerdem ist sie nativ in Big-Data-Frameworks wie Apache Spark, Hive, Presto, Flink und Trino integriert, was eine effiziente Datenverarbeitung im großen Maßstab gewährleistet.

Egal, ob du Python (über PySpark) oder eine andere Sprache verwendest, Parquet kann die Daten so verwalten, dass sie auf verschiedenen Plattformen leicht abgefragt und analysiert werden können.

Wenn du dich noch nicht mit Big Data-Frameworks auskennst, empfehle ich dir den Kurs Einführung in PySpark. Das ist eine gute Möglichkeit, um anzufangen. 

Wie man Parkettdateien liest und schreibt

Nachdem du nun die Grundlagen von Apache Parquet kennst, führe ich dich durch das Schreiben, Lesen und Integrieren vonParquet-Dateien mit Pandas, PyArrowund anderen Big Data Frameworks wie Spark.

Parquet-Dateien mit Pandas schreiben

Um DataFrames als Parquet-Dateien zu speichern, brauchst du Pandas und eine Parquet-Engine wie PyArrow:

pip install pandas pyarrow

Schreibe nun eine Parquet-Datei mit folgendem Code:

import pandas as pd

# Sample DataFrame
data = {
    "Name": ["Alice", "Bob", "Charlie"],
    "Age": [25, 30, 35],
    "City": ["New York", "Los Angeles", "Chicago"]
}
df = pd.DataFrame(data)

# Write to Parquet file
df.to_parquet("data.parquet", engine="pyarrow", index=False)

print("Parquet file written successfully!")

Schreibe eine Parquet-Datei mit Pandas.

Schreibe die Parquet-Datei mit Pandas. Bild vom Autor.

Parquet-Dateien mit Pandas lesen

Hier ist ein einfacher Code, um deine Parquet-Datei zu lesen:

import pandas as pd

# Read the Parquet file
df = pd.read_parquet("data.parquet", engine="pyarrow")

print("Data from Parquet file:")
print(df)

Lies eine Parquet-Datei mit Pandas.

Lies die Parquet-Datei mit Pandas. Bild vom Autor.

Parquet-Dateien mit PyArrow schreiben

PyArrow ist ein Tool aus dem Apache Arrow-Projekt, das die Arbeit mit Parkettdateien erleichtert. Hier erfährst du, wie du mit PyArrow eine Parkettdatei schreiben kannst:

import pandas as pd
import pyarrow as pa
import pyarrow.parquet as pq

# Sample data
df = pd.DataFrame({
    "Name": ["Jacob", "Lauren", "Oliver"],
    "Age": [25, 30, 35],
    "City": ["New York", "Los Angeles", "Chicago"]
})

# Convert to a PyArrow table
table = pa.Table.from_pandas(df)

# Write to Parquet file
pq.write_table(table, "data.parquet")

print("Parquet file written successfully!")

Parquet-Datei mit PyArrow schreiben

Schreibe eine Parquet-Datei mit PyArrow. Bild vom Autor.

Parquet-Dateien mit PyArrow lesen

Hier erfährst du, wie du eine Parquet-Datei mit PyArrow lesen kannst:

import pyarrow.parquet as pq

# Read the Parquet file
table = pq.read_table("data.parquet")

# Convert to a pandas DataFrame
df = table.to_pandas()

print("Data from Parquet file:")
print(df)

Lesen einer Parquet-Datei mit PyArrow.

Lies die Parquet-Datei mit PyArrow ein. Bild vom Autor.

Integration mit Big Data-Frameworks

Wir können Spark nutzen, um Parquet-Dateien direkt zu lesen und zu schreiben. Lade sie von der Apache Spark-Websiteherunter oder richte sie gemäß den Anweisungen ein.

Anschließend importierst du die Bibliotheken und erstellst einen DataFrame: 

from pyspark.sql import SparkSession

# Initialize a Spark session
spark = SparkSession.builder.appName("SparkExample").getOrCreate()

# Define the schema for the dataset
schema = ["Name", "Age", "City"]

# Create a sample data
data = [
    ("Jacob", 30, "New York"),
    ("Lauren", 35, "Los Angeles"),
    ("Billy", 25, "Chicago")
]

# Create a DataFrame from the sample data
df = spark.createDataFrame(data, schema)

# Show the DataFrame
df.show()

Erstellen eines DataFrame-Beispiels in Spark.

Erstelle ein DataFrame-Beispiel in Spark. Bild vom Autor.

Als Nächstes schreibst du diesen DataFrame in eine Parquet-Datei:

# Write DataFrame to Parquet
df.write.parquet("data.parquet")

write.parquet() speichert den DataFrame im Parquet-Format, und die Datei wird employee.parquet genannt. Um diese Parkettdatei zu lesen, kannst du den folgenden Code verwenden:

# Read the Parquet file
parquet_df = spark.read.parquet("data.parquet")

# Show the DataFrame
parquet_df.show()

Die Parquet-Datei in den DataFrame einlesen

Lies die Parkettdatei. Bild vom Autor. 

Neben Spark kann Parquet auch mit Hive arbeiten. Wenn du eine Hive-Tabelle erstellst, verwende STORED AS PARQUET, um Parquet als Speicherformat festzulegen.

Nützliche Operationen mit Parkett

Neben dem Lesen und Schreiben gibt es einige grundlegende Operationen, die jeder Entwickler kennen sollte, da sie bei der Arbeit mit Parkettdateien nützlich sind. In diesem Abschnitt gehen wir sie durch.

Ich werde Pandas und PyArrow verwenden, um die Konzepte zu veranschaulichen.

Daten an eine bestehende Parquet-Datei anhängen

Das Anhängen von Daten ist nützlich, wenn neue Datensätze hinzugefügt werden müssen, ohne den gesamten Datensatz neu zu schreiben.

import pyarrow.parquet as pq
import pyarrow as pa

# Load existing Parquet file
existing_table = pq.read_table("data.parquet")

# New data
new_data = pd.DataFrame({
    "Name": ["David", "Emma"],
    "Age": [40, 28],
    "City": ["San Francisco", "Seattle"]
})

# Convert new data to PyArrow table
new_table = pa.Table.from_pandas(new_data)

# Concatenate both tables
merged_table = pa.concat_tables([existing_table, new_table])

# Write back to Parquet file
pq.write_table(merged_table, "data.parquet")

Nur bestimmte Spalten aus einer Parquet-Datei lesen

Anstatt den gesamten Datensatz zu laden, kannst du nur die benötigten Spalten auswählen, was den Speicherbedarf reduziert und die Leistung verbessert. Das ist deutlich schneller als das Lesen des gesamten Datensatzes:

df = pd.read_parquet("data.parquet", columns=["Name", "Age"])
print(df)

Filtern von Daten beim Lesen (Prädikat Pushdown)

Parquet ermöglicht eine effiziente Filterung auf der Speicherebene, bekannt als Prädikats-Pushdown, der das Laden unnötiger Daten verhindert. Dadurch muss nicht die gesamte Datei gescannt werden, was Abfragen viel schneller macht:

import pyarrow.parquet as pq

# Read only rows where Age > 30
table = pq.read_table("data.parquet", filters=[("Age", ">", 30)])

df = table.to_pandas()
print(df)

Mehrere Parkettdateien zusammenführen

Oft werden die Parkettdateien in separaten Partitionen gespeichert. Du kannst sie in einer einzigen Parkettdatei zusammenführen. Dies ist nützlich, wenn du Datensätze aus verschiedenen Quellen kombinierst:

import pyarrow.parquet as pq
import pyarrow as pa

# List of Parquet files to merge
file_list = ["data_part1.parquet", "data_part2.parquet"]

# Read all files and merge
tables = [pq.read_table(f) for f in file_list]
merged_table = pa.concat_tables(tables)

# Write merged Parquet file
pq.write_table(merged_table, "merged_data.parquet")

CSV in Parkett umwandeln

Wenn du vorhandene CSV-Dateien hast, spart die Konvertierung in Parquet Platz und beschleunigt die Verarbeitung, was die Dateigröße drastisch reduziert und die Leseleistung verbessert:

df = pd.read_csv("data.csv")
df.to_parquet("data.parquet", engine="pyarrow", index=False)

Partitionierung von Parquet-Dateien für schnellere Abfragen

Durch die Partitionierung werden Daten auf der Grundlage eines Spaltenwerts in Unterverzeichnissen organisiert, wodurch Abfragen deutlich schneller werden.

Hier erfährst du, wie du partitionierte Daten schreiben kannst:

df.to_parquet("partitioned_data/", engine="pyarrow", partition_cols=["City"])

Der obige Code erstellt Unterverzeichnisse:

partitioned_data/City=New York/
partitioned_data/City=Los Angeles/
partitioned_data/City=Chicago/

Dann kannst du nur eine bestimmte Partition lesen:

df = pd.read_parquet("partitioned_data/City=New York/")
print(df)

Dies beschleunigt die Analyse, da nur relevante Partitionen gescannt werden!

Komprimierung zur Optimierung der Speicherung verwenden

Parquet unterstützt Komprimierungsalgorithmen wie Snappy, Gzip und Brotli, um die Dateigröße zu reduzieren:

df.to_parquet("compressed.parquet", engine="pyarrow", compression="snappy")

Best Practices für die Verwendung von Apache Parquet

Als ich anfing, Apache Parquet zu benutzen, merkte ich, dass kleine Anpassungen seine Effizienz erheblich verbessern können. Hier sind einige meiner besten Tipps für die Optimierung von Parkett in realen Szenarien.

Wähle den richtigen Komprimierungscodec

Wenn du Speicherplatz sparen willst, können Codecs wie Snappy oder Gzip Snappy bietet eine schnelle Komprimierung und Dekomprimierung und eignet sich perfekt für Situationen, in denen es auf Geschwindigkeit ankommt.

Umgekehrt ist Gzip ideal, wenn du wenig Speicherplatz zur Verfügung hast, aber etwas langsamere Lesevorgänge verkraften kannst. Entscheidend ist, dass du dein Arbeitspensum verstehst - ein schneller Codec wie Snappy ist oft die bessere Wahl, wenn du häufig auf Dateien zugreifst. Für die Archivierung von Daten ist Gzip jedoch am besten geeignet.

Daten effektiv partitionieren

Unterteile deine Daten in logische Teilmengen, z. B. nach Datum, Region oder einem anderen häufig abgefragten Feld, um die Datenmenge zu reduzieren, die bei einer Abfrage durchsucht wird. Ich habe einmal mit einem Datensatz gearbeitet, der Jahre von Transaktionsprotokollen enthielt, und ihn nach Jahr und Monat unterteilt, um bestimmte Zeiträume in Sekunden statt in Minuten abzurufen. 

Schema-Entwicklung überwachen

Ich achte immer darauf, dass neue Spalten so hinzugefügt werden, dass sie die bestehenden Prozesse nicht stören. Das bedeutet in der Regel, dass sie angehängt werden, anstatt bestehende zu ändern. Dazu kannst du die Schema-Evolution von Apache Spark nutzen, um sanftere Übergänge zu schaffen. 

Apache Parquet im Vergleich zu anderen Datenformaten

Lass uns Parquet mit anderen Datenspeicherformaten vergleichen. 

Parkett vs. CSV

Wir haben das bereits in diesem Blogpost behandelt, aber ich möchte es noch einmal betonen: Parquet und CSV sind zwei verschiedene Formate, die Daten unterschiedlich verarbeiten.

Parquet organisiert die Daten in Spalten, während CSV sie in Zeilen anordnet. Wenn du Parquet verwendest, werden alle Daten aus derselben Spalte gruppiert, so dass du ganz einfach Daten aus bestimmten Spalten abrufen kannst, ohne alles andere durchsuchen zu müssen. Es ist schneller und braucht weniger Platz, weil Parquet die Daten komprimiert.

Spaltenbasiertes Parkettformat.

Spaltenbasiertes Parkettformat. Bild vom Autor.

CSV hingegen speichert die Daten Zeile für Zeile. Es ist einfach und funktioniert gut für kleine Datensätze, aber es ist nicht ideal für große Datensätze. Jede Abfrage muss die gesamte Zeile lesen, auch wenn du nur ein paar Spalten brauchst. Das verlangsamt die Abläufe und benötigt mehr Speicherplatz für die Verarbeitung.

Zeilenbasiertes CSV-Format.

Zeilenbasiertes CSV-Format. Bild vom Autor.

Parkett vs. JSON

JSON eignet sich hervorragend, um Daten so zu strukturieren, dass sie leicht zu verstehen sind, aber es hat einen Nachteil: Es ist nicht sehr effizient, was die Speicherung oder Geschwindigkeit angeht. Lass mich also anhand eines Beispiels erklären, warum Parquet effizienter ist als JSON.

Angenommen, wir haben eine Tabelle mit Mitarbeiterdaten mit drei Spalten: EmployeeID, Department, und Location:

EmployeeID

Abteilung

Standort

1

HR

New York

2

HR

New York

3

HR

New York

4

IT

San Francisco

5

IT

San Francisco

Wenn wir diese Daten nun als JSON speichern, sehen sie etwa so aus:

[
  {"EmployeeID": 1, "Department": "HR", "Location": "New York"},
  {"EmployeeID": 2, "Department": "HR", "Location": "New York"},
  {"EmployeeID": 3, "Department": "HR", "Location": "New York"},
  {"EmployeeID": 4, "Department": "IT", "Location": "San Francisco"},
  {"EmployeeID": 5, "Department": "IT", "Location": "San Francisco"}
]

Beachte, dass JSON Spaltennamen wie EmployeeID, Department und Location für jeden einzelnen Datensatz wiederholt. Außerdem werden die Werte für HR und New York mehrfach wiederholt. Dadurch wird die Datei viel größer und langsamer.

Stellen wir uns nun vor (weil Parquet nicht für Menschen lesbar ist), wir speichern die gleichen Daten wie Parquet:

  • EmployeeID: [1, 2, 3, 4, 5]
  • Abteilung: [HR, HR, HR, IT, IT] (komprimiert als HR: 3, IT: 2)
  • Standort: [New York, New York, New York, San Francisco, San Francisco] (komprimiert als New York: 3, San Francisco: 2).

Anstatt Zeile für Zeile zu speichern, organisiert Parquet die Daten nach Spalten und komprimiert sich wiederholende Werte.

Parkett vs Avro

Avro ist ein zeilenbasiertes Format. Sie eignet sich hervorragend für Aufgaben wie das Streaming von Daten oder die Verarbeitung von Protokollen, bei denen du ständig neue Datensätze hinzufügst oder komplette Zeilen abrufst. Aber das spaltenbasierte Format von Parquet ist perfekt für Analysen. Wenn du Abfragen durchführst, um große Datenmengen zu analysieren, ist Parquet am besten geeignet. Es zieht die Daten aus den notwendigen Spalten und überspringt den Rest, um Zeit und Ressourcen zu sparen.

Kurz gesagt: Parquet eignet sich besser zum Lesen und Analysieren großer Datensätze, während Avro ideal zum Schreiben und Speichern von Daten ist, die sich leicht aktualisieren lassen.

Hier ist eine Tabelle zum Vergleich zwischen Parkett und CSV vs. JSON vs. Avro, einschließlich Vor- und Nachteile sowie Anwendungsfälle:

Format

Pros

Nachteile

Anwendungsfälle

Parkett

✅ Säulenförmiges Format für schnelle Analysen

✅ Hohe Verdichtungseffizienz

✅ Unterstützt die Schemaentwicklung

✅ Optimiert für Big Data Frameworks (Spark, Hive, Presto)

✅ Unterstützt Prädikat-Pushdown (effiziente Filterung)

❌ Nicht für Menschen lesbar

Langsamer für zeilenbasierte Operationen

❌ Komplexere Schreiboperationen

  • Big Data-Verarbeitung (Hadoop, Spark, Hive)
  • Cloud Data Lakes (AWS S3, Azure Data Lake)
  • Schnelle Analysen und OLAP-Workloads

CSV

✅ Menschenlesbar und einfach

✅ Einfach zu generieren und zu parsen

✅ Kompatibel mit fast allen Werkzeugen

❌ Keine Schema-Unterstützung

❌ Langsam für große Datenmengen

❌ Große Dateigrößen (keine Komprimierung)

❌ Muss die gesamte Datei nach Abfragen durchsuchen

  • Datenaustausch (einfache tabellarische Daten)
  • Kleine bis mittlere Datensätze
  • Interoperabilität mit Altsystemen

JSON

✅ Unterstützt verschachtelte und halbstrukturierte Daten

✅ Menschenlesbar

✅ Weit verbreitet in Web-APIs

✅ Flexibles Schema

❌ Größere Dateigrößen (aufgrund des Textformats)

❌ Langsam für große Datenabfragen

❌ Keine native Indizierung

  • Web-APIs und NoSQL-Datenbanken (MongoDB, Elasticsearch)
  • Streaming-Anwendungen
  • Speicherung von Protokollen oder halbstrukturierten Daten

Avro

✅ Zeilenbasiertes Format für schnelles Schreiben

✅ Kompaktes Binärformat (effiziente Speicherung)

✅ Unterstützt die Schemaentwicklung

✅ Gut für Streaming und Nachrichtenwarteschlangen

❌ Nicht für Menschen lesbar

❌ Weniger effizient für analytische Abfragen im Vergleich zu Parquet

❌ Benötigt Avro-Bibliotheken für die Verarbeitung

  • Streaming und Echtzeitverarbeitung (Kafka, Flink)
  • Langfristige Speicherung mit Schemaänderungen
  • Effiziente Datenserialisierung

Wann sollte man Apache Parquet verwenden?

Zusammengefasst gibt es hier einige Situationen, in denen Parkett die beste Wahl ist:

  • Analytik-lastige Workloads: Das Spaltenformat von Parquet ermöglicht es uns, nur die Daten abzurufen, die wir brauchen, was Abfragen beschleunigt und Zeit spart. Ich habe das bei der Verarbeitung von Datensätzen mit Apache Spark in der Praxis erlebt - Abfragen, die früher Minuten dauerten, liefen dank der effizienten Struktur von Parquet in Sekundenschnelle.
  • Data Lake-Architekturen: Wenn du einen Data Lake aufbaust, summieren sich die Speicherkosten schnell. Aber die Komprimierungsfunktionen von Parquet reduzieren die Größe der gespeicherten Daten, damit du Speicherplatz sparen kannst, ohne die Leistung zu beeinträchtigen. 
  • Anwendungsfälle mit großen Datenmengen: Parquet kann mit großen und komplexen Datensätzen umgehen, insbesondere mit solchen mit verschachtelten oder hierarchischen Strukturen. Durch die Unterstützung zahlreicher Datentypen und die Schemaentwicklung wird sichergestellt, dass du deine Daten anpassen kannst, wenn sich die Anforderungen ändern.

Schlussgedanken

Apache Parquet ist perfekt für die Verarbeitung großer Datenmengen. Es ist schnell, spart Speicherplatz und funktioniert mit Tools wie Spark. Wenn du mehr erfahren möchtest, schau dir die folgenden Ressourcen an:

Verbessere deine PySpark-Kenntnisse

Verbessere deine Datenkenntnisse durch die Beherrschung von Apache Spark.

FAQs

Was ist der Unterschied zwischen Parkett und ORC (Optimized Row Columnar)?

Sowohl Parquet als auch ORC sind spaltenförmige Speicherformate, die für Big Data optimiert sind. ORC wird jedoch hauptsächlich im Hadoop-Ökosystem verwendet (vor allem in Verbindung mit Hive), während Parquet von Spark, Presto und anderen Big-Data-Frameworks breiter unterstützt wird. ORC bietet eine bessere Komprimierung für stark strukturierte Daten, während Parquet flexibler bei der Schemaentwicklung ist und gut in verschiedenen Umgebungen funktioniert.

Kann Parquet Daten in Echtzeit einspeisen oder ist es hauptsächlich für die Stapelverarbeitung geeignet?

Parquet wurde in erster Linie für die Stapelverarbeitung entwickelt, ist aber nicht ideal für Echtzeit-Streaming-Ingestion. Es gibt jedoch einige Umgehungsmöglichkeiten:

  • Kafka + Parquet: Du kannst Streaming-Daten zunächst in Avro speichern und sie dann regelmäßig für Analysen in Parquet umwandeln.
  • Delta Lake/Iceberg: Diese Formate erweitern Parquet um die Unterstützung von Echtzeit-Schreibvorgängen und ACID-Transaktionen, wodurch Parquet in Echtzeitszenarien besser genutzt werden kann.

Was sind die besten Methoden für die Speicherung von Parquet-Dateien in Cloud Data Lakes?

Hier sind ein paar Best Practices zur Optimierung der Parquet-Leistung in Cloud-Umgebungen (AWS S3, Azure Data Lake, GCS):

  • Partitionierung: Speichere Dateien basierend auf logischen Partitionen (z. B. year/month/day ), um Abfragen zu beschleunigen.
  • Komprimierung: Verwende Snappy für schnelle Lesevorgänge oder Gzip/Zstd für bessere Kompressionsraten.
  • Optimierung der Dateigröße: Strebe 100 MB bis 1 GB pro Datei an, um einen Ausgleich zwischen Leseleistung und Metadaten-Overhead zu schaffen.
  • Säulenbeschneidung: Frag nur die notwendigen Spalten ab, um die E/A zu reduzieren.
  • Verwende Parquet-fähige Engines: Abfrage mit Athena, BigQuery oder Spark anstelle von Rohdateiscans.

Wie kann ich Datensätze in einer Parkettdatei aktualisieren oder löschen?

Parquet unterstützt keine In-Place-Updates oder -Löschungen, da es nur für Append-Only-Writes optimiert ist. Du kannst jedoch Delta Lake / Apache Iceberg (ACID-konforme Speicherschichten über Parquet) für Aktualisierungen und Löschungen verwenden.

Du kannst auch einen Workaround für Pandas/Spark verwenden: Lies die Parquet-Datei, filtere Datensätze heraus und schreibe eine neue Datei:

df = pd.read_parquet("data.parquet")
df = df[df["Name"] != "Alice"]  # Delete Alice's record
df.to_parquet("data.parquet", index=False)

Laiba Siddiqui's photo
Author
Laiba Siddiqui
LinkedIn
Twitter

Ich bin ein Inhaltsstratege, der es liebt, komplexe Themen zu vereinfachen. Ich habe Unternehmen wie Splunk, Hackernoon und Tiiny Host geholfen, ansprechende und informative Inhalte für ihr Publikum zu erstellen.

Themen

Lerne mehr über Data Engineering mit diesen Kursen!

Kurs

Introduction to Data Engineering

4 hr
116.4K
Learn about the world of data engineering in this short course, covering tools and topics like ETL and cloud computing.
Siehe DetailsRight Arrow
Kurs starten
Mehr anzeigenRight Arrow
Verwandt

Der Blog

Die 32 besten AWS-Interview-Fragen und Antworten für 2024

Ein kompletter Leitfaden zur Erkundung der grundlegenden, mittleren und fortgeschrittenen AWS-Interview-Fragen, zusammen mit Fragen, die auf realen Situationen basieren. Es deckt alle Bereiche ab und sorgt so für eine abgerundete Vorbereitungsstrategie.
Zoumana Keita 's photo

Zoumana Keita

30 Min.

Der Blog

Die 20 besten Snowflake-Interview-Fragen für alle Niveaus

Bist du gerade auf der Suche nach einem Job, der Snowflake nutzt? Bereite dich mit diesen 20 besten Snowflake-Interview-Fragen vor, damit du den Job bekommst!
Nisha Arya Ahmed's photo

Nisha Arya Ahmed

20 Min.

Der Blog

Lehrer/innen und Schüler/innen erhalten das Premium DataCamp kostenlos für ihre gesamte akademische Laufbahn

Keine Hacks, keine Tricks. Schüler/innen und Lehrer/innen, lest weiter, um zu erfahren, wie ihr die Datenerziehung, die euch zusteht, kostenlos bekommen könnt.
Nathaniel Taylor-Leach's photo

Nathaniel Taylor-Leach

4 Min.

Der Blog

Q2 2023 DataCamp Donates Digest

DataCamp Donates hat im zweiten Quartal 2023 über 20.000 Stipendien an unsere gemeinnützigen Partner vergeben. Erfahre, wie fleißige benachteiligte Lernende diese Chancen in lebensverändernde berufliche Erfolge verwandelt haben.
Nathaniel Taylor-Leach's photo

Nathaniel Taylor-Leach

Der Blog

2022-2023 DataCamp Classrooms Jahresbericht

Zu Beginn des neuen Schuljahres ist DataCamp Classrooms motivierter denn je, das Lernen mit Daten zu demokratisieren. In den letzten 12 Monaten sind über 7.650 neue Klassenzimmer hinzugekommen.
Nathaniel Taylor-Leach's photo

Nathaniel Taylor-Leach

8 Min.

Der Blog

Top 30 Generative KI Interview Fragen und Antworten für 2024

Dieser Blog bietet eine umfassende Sammlung von Fragen und Antworten zu generativen KI-Interviews, die von grundlegenden Konzepten bis hin zu fortgeschrittenen Themen reichen.
Hesam Sheikh Hassani's photo

Hesam Sheikh Hassani

15 Min.

Mehr anzeigenMehr anzeigen