Wie kann man einen Parkett-Datensatz von bescheidener Größe in einen speicherinternen Pandas DataFrame lesen, ohne eine Cluster-Computing-Infrastruktur wie Hadoop oder Spark einzurichten? Dies ist nur eine mäßige Datenmenge, die ich mit einem einfachen Python-Skript auf einem Laptop im Speicher lesen möchte. Die Daten befinden sich nicht in HDFS. Es befindet sich entweder im lokalen Dateisystem oder möglicherweise in S3. Ich möchte keine anderen Dienste wie Hadoop, Hive oder Spark starten und konfigurieren.
Ich dachte, Blaze / Odo hätte dies möglich gemacht: In der Odo-Dokumentation wird Parkett erwähnt, aber die Beispiele scheinen alle eine externe Hive-Laufzeit zu durchlaufen.
import pyarrow.parquet as pq; df = pq.read_table('dataset.parq').to_pandas()
Antworten:
pandas 0.21 führt neue Funktionen für Parkett ein :
pd.read_parquet('example_pa.parquet', engine='pyarrow')
oder
pd.read_parquet('example_fp.parquet', engine='fastparquet')
Der obige Link erklärt:
quelle
pd.read_parquet()
ein Problem mit dem Snappy-Fehler auftritt, führen Sie es ausconda install python-snappy
, um snappy zu installieren.Update: Seit ich darauf geantwortet habe, wurde viel an diesem Blick auf Apache Arrow gearbeitet, um Parkett besser lesen und schreiben zu können. Außerdem: http://wesmckinney.com/blog/python-parquet-multithreading/
Es gibt einen Python-Parkettleser, der relativ gut funktioniert: https://github.com/jcrobak/parquet-python
Es werden Python-Objekte erstellt, und dann müssen Sie sie in einen Pandas-Datenrahmen verschieben, damit der Prozess langsamer als
pd.read_csv
beispielsweise ist.quelle
pd.read_parquet
ist jetzt Teil von Pandas. Die andere Antwort sollte als gültig markiert sein.Neben Pandas bietet Apache Pyarrow auch die Möglichkeit, Parkett in Datenrahmen umzuwandeln
Der Code ist einfach, geben Sie einfach Folgendes ein:
import pyarrow.parquet as pq df = pq.read_table(source=your_file_path).to_pandas()
Weitere Informationen finden Sie im Dokument von Apache pyarrow zum Lesen und Schreiben einzelner Dateien
quelle