2016-12-14 3 views
1

Ich schreibe auf s3 mit Funken als AVRO-Datei. Es wird als einzelne Datei gespeichert, aber ich möchte es beim Schreiben in mehrere Dateien aufteilen.Wie kann ich über Spark als Chunks in S3 schreiben?

I verwendet:

df.coalesce(6).write.json(path) 

aber es ist immer noch als eine einzelne Datei zu speichern.

Jede Hilfe wird geschätzt!

Danke.!

+0

Sie können dieses Paket überprüfen kann es helfen u https://spark-packages.org/package/knoldus/spark-s3 –

Antwort

0

Es ist möglich, dass Ihre RDD nur eine Partition vor dem coalesce(6)-Aufruf hat. coalesce() funktioniert nur dann, wenn die Anzahl der Partitionen zu reduzieren, aber tut nichts, wenn es um sie zu erhöhen gefragt wird:

coalesce (numPartitions): die Anzahl der Partitionen in der RDD zu numPartitions verringern

Sie könnten versuchen, repartition(6) anstelle, was auch wenn die Anzahl der Partitionen erhöht funktioniert:

repartition (numPartitions): Die Daten in der RDD werden nach dem Zufallsprinzip neu gemischt, um entweder mehr oder weniger Partitionen zu erstellen und sie über diese hinweg auszugleichen. Dies mischt immer alle Daten über das Netzwerk.

+0

Es funktionierte, Dank – GSR

+0

Ich möchte nur im Detail dieses abit verstehen, Wenn ich eine jdbc Verbindung mache, wird es einen einzelnen Verbindungspunkt herstellen und an einem einzelnen Executor arbeiten. Wenn ich den Datenrahmen neu partitioniere und die Übertragungen mache. Laufen die Transformationen parallel oder auf dem Single Executor? – GSR

+0

Es hängt davon ab, wie viele Executoren dem Job zugewiesen sind. Wenn Sie nur eine zuweisen, werden nacheinander die sechs Teile seriell genommen. Wenn Sie sechs Executoren zuweisen, nehmen sie jeden einzelnen Job und laufen parallel. –

Verwandte Themen