Ich hoffe, Sie als meine eine bessere Antwort bekommen ...
Ich habe in einer ähnlichen Situation selbst gewesen, außer mit „ORC“ statt Avro. Ich habe im Grunde die Hände hochgeworfen und habe die ORC-Dateiklassen direkt aufgerufen, um die Dateien selbst zu schreiben.
In meinem Fall würde mein Ansatz die Partitionierung der Daten über "partitionBy" in 26 Partitionen beinhalten, eine für jeden ersten Buchstaben A-Z. Rufen Sie dann "mapPartitionsWithIndex" auf, und übergeben Sie eine Funktion, die die i-te Partition im entsprechenden Pfad an eine Avro-Datei ausgibt. Um schließlich Spark dazu zu bringen, tatsächlich etwas zu tun, muss mapPartitionsWithIndex beispielsweise eine Liste zurückgeben, die den einzelnen booleschen Wert "true" enthält. Rufen Sie dann "count" auf der RDD auf, die von mapPartitionsWithIndex zurückgegeben wird, um Spark zum Starten der Show zu erhalten.
fand ich ein Beispiel hier eine Avro-Datei zu schreiben: http://www.myhadoopexamples.com/2015/06/19/merging-small-files-into-avro-file-2/
Dank! Das Schreiben von Partitionen scheint zu funktionieren, zumindest bei einem kleinen Datensatz im lokalen Modus. –
Folgefrage. Mit diesem Ansatz erstellt Spark nur 26 Partitionen? Und damit hätte jedes Verzeichnis eine einzige Datei? Ich bin besorgt, dass die Dateien sehr groß werden und dass, wenn die Mehrheit der Daten unter dem Buchstaben A stehen würde, dann wird dieser Executor mit nicht genügend Arbeitsspeicher fehlschlagen. –
Die in "mapPartitionsWithIndex" übergebene Funktion kann die Größe der Ausgabedatei begrenzen. Diese Funktion wird jedes Element in der Partition durchlaufen. Es könnte die Anzahl der Datensätze, die es in eine Ausgabedatei geschrieben hat, verfolgen und diese schließen und eine neue öffnen, wenn sie ein Maximum erreicht hat. –