2013-04-30 18 views
33

Für ein Big Data-Projekt, ich plane, spark, die einige nette Funktionen wie In-Memory-Berechnungen für wiederholte Arbeitslasten hat. Es kann auf lokalen Dateien oder auf HDFS ausgeführt werden.gzip Unterstützung in Spark

In der offiziellen Dokumentation kann ich jedoch keinen Hinweis darauf finden, wie gezippte Dateien verarbeitet werden. In der Praxis kann es sehr effizient sein, .gz-Dateien anstelle von entpackten Dateien zu verarbeiten.

Gibt es eine Möglichkeit, das Lesen von gezippten Dateien manuell zu implementieren oder wird das Entpacken beim Lesen einer .gz-Datei bereits automatisch durchgeführt?

Antwort

66

von der Funken Scala Programming Guide section on "Hadoop Datasets":

Funken können verteilte Datensätze aus einer beliebigen Datei im Hadoop Distributed File System (HDFS) oder einem anderen Speichersystemen unterstützt von Hadoop (einschließlich Ihrer lokalen Dateisystem gespeichert erstellen, Amazon S3, Hypertable, HBase, usw.). Spark unterstützt Textdateien, SequenceFiles und jedes andere Hadoop InputFormat.

Die Unterstützung für gzip-Eingabedateien sollte genauso funktionieren wie in Hadoop. Zum Beispiel sollte sc.textFile("myFile.gz") automatisch gzip-komprimierte Dateien dekomprimieren und lesen (textFile() ist eigentlich implemented mit Hadoop TextInputFormat, die Gzip-komprimierte Dateien unterstützt).

Wie @ Nick-Chammas in den Kommentaren erwähnt:

beachten Sie, dass, wenn Sie sc.textFile() auf einer gzip-Datei aufrufen, Spark- Sie eine RDD mit nur 1 Partition (ab 0.9.0) geben . Dies liegt daran, dass die gezippten Dateien not splittable sind. Wenn Sie die RDD nicht neu partitionieren irgendwie, alle Operationen auf diesem RDD wird auf einen einzelnen Kern begrenzt

+45

möchte ich anmerken, dass, wenn Sie rufen 'sc.textFile()' auf einer gzip-Datei, Funken geben Sie eine RDD mit nur 1 Partition (ab 0.9.0). Dies liegt daran, dass gezippte Dateien [nicht teilbar] sind (http://mail-archives.apache.org/mod_mbox/spark-user/201310.mbox/%[email protected] .com% 3E). Wenn Sie die RDD nicht irgendwie partitionieren, sind alle Operationen auf dieser RDD auf einen einzelnen Kern beschränkt. –

+3

Wenn ich 'logs = sc.textFile (" logs/*. Bz2 ")' versuche, erhalte ich einen Fehler bei nachfolgenden 'logs.count()'. Irgendwelche Ideen warum? – zbinsd

+0

@zbinsd hast du es am Ende herausgefunden? Beim Laden von tar.gz-Dateien wird folgende Fehlermeldung angezeigt: JsonParseException: Unzulässiges Zeichen ((STRG-CHAR, Code 0)): Zwischen den Token – Leon