Wie man Parquet in Python in JSON konvertiert
Emily Parker
Product Engineer · Leapcell

Key Takeaways
- Python-Bibliotheken wie Pandas und PyArrow vereinfachen die Parquet-zu-JSON-Konvertierung.
- Chunk-Verarbeitung ist unerlässlich, um große Parquet-Dateien effizient zu verarbeiten.
- Die Wahl der richtigen Engine (PyArrow, FastParquet oder DuckDB) beeinflusst Leistung und Kompatibilität.
Parquet ist ein spaltenorientiertes Speicherformat, das für Leistung und Speichereffizienz optimiert ist und in Big-Data-Verarbeitungsframeworks wie Apache Spark und Hadoop weit verbreitet ist. JSON (JavaScript Object Notation) hingegen ist ein leichtgewichtiges und menschenlesbares Format, das häufig für den Datenaustausch verwendet wird. Das Konvertieren von Parquet-Dateien in JSON kann unerlässlich sein, wenn Daten mit Systemen ausgetauscht werden, die JSON bevorzugen, oder zur einfacheren Datenprüfung.
Dieser Leitfaden zeigt, wie diese Konvertierung mit Python durchgeführt wird, und behandelt verschiedene Methoden, die für unterschiedliche Szenarien geeignet sind.
Voraussetzungen
Bevor Sie fortfahren, stellen Sie sicher, dass Sie die erforderlichen Python-Bibliotheken installiert haben. Sie können sie mit pip installieren:
pip install pandas pyarrow fastparquet
pandas
: Für Datenmanipulation und -analyse.pyarrow
: Bietet Python-Bindungen für Apache Arrow und wird zum Lesen von Parquet-Dateien verwendet.fastparquet
: Ein alternativer Parquet-Reader und -Writer.
Methode 1: Verwenden von Pandas und PyArrow
Dies ist die einfachste Methode, die für kleine bis mittelgroße Parquet-Dateien geeignet ist.
import pandas as pd # Lesen der Parquet-Datei df = pd.read_parquet('data.parquet', engine='pyarrow') # Konvertieren des DataFrame in JSON und Speichern in einer Datei df.to_json('data.json', orient='records', lines=True)
orient='records'
: Jede Zeile der JSON-Datei entspricht einer Zeile im DataFrame.lines=True
: Schreibt die JSON-Datei in einem zeilengetrennten Format, das für Streaming und große Dateien nützlich ist.
Methode 2: Verarbeiten großer Dateien in Blöcken
Für große Parquet-Dateien, die möglicherweise nicht in den Speicher passen, ist es ratsam, die Daten in Blöcken zu verarbeiten.
import pyarrow.parquet as pq import json # Öffnen der Parquet-Datei parquet_file = pq.ParquetFile('large_data.parquet') # Verarbeiten und Schreiben in Blöcken with open('large_data.json', 'w') as json_file: json_file.write('[') # Start des JSON-Arrays first_chunk = True for batch in parquet_file.iter_batches(batch_size=10000): df_chunk = batch.to_pandas() json_str = df_chunk.to_json(orient='records') json_str = json_str[1:-1] # Entfernen der umschließenden Klammern if not first_chunk: json_file.write(',') else: first_chunk = False json_file.write(json_str) json_file.write(']') # Ende des JSON-Arrays
Dieser Ansatz liest die Parquet-Datei in Batches, konvertiert jeden Batch in JSON und schreibt ihn inkrementell in die Ausgabedatei, wodurch die Speichernutzung effizient verwaltet wird.
Methode 3: Konvertieren bestimmter Spalten
Wenn Sie nur bestimmte Spalten aus der Parquet-Datei benötigen, können Sie diese während des Lesevorgangs angeben.
import pandas as pd # Lesen bestimmter Spalten aus der Parquet-Datei df = pd.read_parquet('data.parquet', columns=['column1', 'column2']) # Konvertieren in JSON df.to_json('selected_columns.json', orient='records', lines=True)
Diese Methode reduziert die Speichernutzung und die Verarbeitungszeit, indem nur die benötigten Daten geladen werden.
Methode 4: Verwenden von FastParquet
fastparquet
ist eine Alternative zu pyarrow
zum Lesen von Parquet-Dateien und kann in bestimmten Szenarien Leistungsvorteile bieten.
import pandas as pd # Lesen der Parquet-Datei mit fastparquet df = pd.read_parquet('data.parquet', engine='fastparquet') # Konvertieren in JSON df.to_json('data_fastparquet.json', orient='records', lines=True)
Wählen Sie die Engine, die Ihren Leistungs- und Kompatibilitätsanforderungen am besten entspricht.
Methode 5: Verwenden von DuckDB
DuckDB ist ein In-Process-SQL-OLAP-Datenbankverwaltungssystem, das Parquet-Dateien effizient verarbeiten kann.
import duckdb # Konvertieren von Parquet in JSON mit DuckDB duckdb.sql(""" COPY (SELECT * FROM 'data.parquet') TO 'data.json' (FORMAT 'json') """)
Diese Methode ist besonders nützlich für komplexe Abfragen und Transformationen während des Konvertierungsprozesses.
Tipps und Best Practices
- Umgang mit verschachtelten Daten: Parquet-Dateien können verschachtelte Datenstrukturen enthalten. Stellen Sie sicher, dass Ihre JSON-Ausgabe die gewünschte Struktur beibehält. Möglicherweise müssen Sie verschachtelte Felder entsprechend verarbeiten.
- Datentypen: Beachten Sie die Datentypkonvertierungen zwischen Parquet und JSON. Einige Typen haben möglicherweise keine direkten Entsprechungen und erfordern möglicherweise eine benutzerdefinierte Behandlung.
- Leistung: Für sehr große Datensätze sollten Sie die Chunk-Verarbeitung oder für Big Data optimierte Tools verwenden, um Speicherprobleme zu vermeiden.
Fazit
Das Konvertieren von Parquet-Dateien in JSON in Python ist durch verschiedene Methoden möglich, die jeweils für unterschiedliche Szenarien und Anforderungen geeignet sind. Egal, ob Sie mit kleinen Dateien oder großen Datensätzen arbeiten, das reichhaltige Ökosystem von Python bietet die Werkzeuge, die für eine effiziente und effektive Datenkonvertierung erforderlich sind.
Wählen Sie die Methode, die Ihren spezifischen Anforderungen entspricht, und berücksichtigen Sie dabei Faktoren wie Dateigröße, Leistung und Datenkomplexität.
FAQs
Verwenden Sie Pandas mit PyArrow und to_json()
für eine schnelle Konvertierung.
Lesen und verarbeiten Sie die Parquet-Datei in Batches, um die Speichernutzung zu verwalten.
Ja, verwenden Sie den columns
-Parameter von Pandas, um nur die benötigten Spalten zu laden.
Wir sind Leapcell, Ihre erste Wahl für das Hosten von Backend-Projekten.
Leapcell ist die Next-Gen Serverless Plattform für Webhosting, Async Tasks und Redis:
Multi-Language Support
- Entwickeln Sie mit Node.js, Python, Go oder Rust.
Stellen Sie unbegrenzt viele Projekte kostenlos bereit
- zahlen Sie nur für die Nutzung - keine Anfragen, keine Gebühren.
Unschlagbare Kosteneffizienz
- Pay-as-you-go ohne Leerlaufgebühren.
- Beispiel: 25 $ unterstützen 6,94 Millionen Anfragen bei einer durchschnittlichen Antwortzeit von 60 ms.
Optimierte Entwicklererfahrung
- Intuitive Benutzeroberfläche für mühelose Einrichtung.
- Vollautomatische CI/CD-Pipelines und GitOps-Integration.
- Echtzeit-Metriken und Protokollierung für verwertbare Erkenntnisse.
Mühelose Skalierbarkeit und hohe Leistung
- Automatische Skalierung zur einfachen Bewältigung hoher Parallelität.
- Null Betriebsaufwand - konzentrieren Sie sich einfach auf das Bauen.
Erfahren Sie mehr in der Dokumentation!
Folgen Sie uns auf X: @LeapcellHQ