Wie speichert man einen Datenrahmen als komprimierte (gezippte) CSV?

7

Ich benutze Spark 1.6.0 und Scala.

Ich möchte einen Datenrahmen als komprimiertes CSV-Format speichern.

Hier ist, was ich bisher habe (angenommen, ich habe bereits df und sc als SparkContext ):

%Vor%

Die Ausgabe ist nicht in gz format.

    
user2628641 20.10.2016, 20:32
quelle

4 Antworten

4

Auf dem Funken-csv github: Ссылка

Man kann lesen:

  

codec : Komprimierungscodec zum Speichern in Datei. Dies sollte der vollständig qualifizierte Name einer Klasse sein, die org.apache.hadoop.io.compress.CompressionCodec implementiert, oder eine der Groß- und Kleinschreibung, die die Groß- und Kleinschreibung nicht berücksichtigt (bzip2, gzip, lz4 und snappy). Standardmäßig wird keine Komprimierung verwendet, wenn kein Codec angegeben ist.

In Ihrem Fall sollte das funktionieren: df.write.format("com.databricks.spark.csv").codec("gzip")\ .save('my_directory/my_file.gzip')

    
Alex-Antoine Fortin 28.11.2016, 19:37
quelle
10

Dieser Code funktioniert für Spark 2.1, wo .codec nicht verfügbar ist.

%Vor%

Für Spark 2.2 können Sie die hier beschriebene Option df.write.csv(...,codec="gzip") verwenden: Ссылка

    
Ravi Kant Saini 23.03.2017 18:10
quelle
6

Mit Spark 2.0+ ist das etwas einfacher geworden:

%Vor%

Sie benötigen das externe Databricks CSV-Paket nicht mehr.

Der Autor% csv() unterstützt eine Reihe praktischer Optionen. Zum Beispiel:

  • sep : Zum Festlegen des Trennzeichens.
  • quote : Ob und wie Werte angegeben werden.
  • header : Gibt an, ob eine Kopfzeile eingefügt werden soll.

Zusätzlich zu gzip :

gibt es eine Reihe anderer Komprimierungscodecs, die Sie verwenden können
  • bzip2
  • lz4
  • snappy
  • deflate

Die vollständigen Spark-Dokumente für den csv() writer finden Sie hier: Python / Scala "     

Nick Chammas 13.11.2017 22:33
quelle
1

Schreiben Sie die CSV-Datei mit Kopfzeilen und benennen Sie die Datei part-000 in .csv.gzip

um %Vor%

Wenn Sie die Kopfzeile nicht benötigen, setzen Sie sie auf false und Sie müssen die Koaleszenz auch nicht durchführen. Es wird auch schneller zu schreiben sein.

    
morfious902002 14.11.2017 18:30
quelle