Verhindern DataFrame.partitionBy() entfernen partitionierten Spalten aus einem schema
Ich bin Partitionierung ein DataFrame wie folgt:
df.write.partitionBy("type", "category").parquet(config.outpath)
Den code gibt die erwarteten Ergebnisse (d.h. die Daten partitioniert, die von Art & Kategorie). Aber der "Typ" und "Kategorie" - Spalten werden entfernt, das Daten /schema. Gibt es eine Möglichkeit zu verhindern, dass dieses Verhalten?
- Ist das nicht ein Punkt? Alle erforderlichen Daten sind noch verschlüsselt im Verzeichnis-Struktur, damit es nicht zu Datenverlust. Wenn Sie wollen ein paar-Werte-pro-Datei, die Sie könnten versuchen
df.repartition("type", "category").write(...)
aber Sie werden nicht erhalten, schöne Struktur. - ja, ich Stimme zu, es gibt keinen Datenverlust. Jedoch, die Wiederherstellung der Spalten verwendet für die Partitionierung ist nicht-trivial für einige Anwendungsfälle. Zum Beispiel, wenn ich will, um die Daten zu laden, die in der Schweinehaltung, wie kann ich das wiederherstellen, der Typ und die Kategorie-Spalten?
- Noch nicht verwendet, Schwein in eine Weile. Nicht
ParquetLoader
verstehen, die Struktur aus der box? - super lange Verzögerung zu deiner Frage... Nein, das Schwein nicht enthalten die Verzeichnis-Struktur mit der Parkett-schema.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich denken kann, einen workaround, das ist ziemlich lame, aber funktioniert.
Ich bin, diese Frage zu beantworten, in der Hoffnung, jemand hätte eine bessere Antwort oder Erklärung als das, was ich habe (wenn OP eine bessere Lösung gefunden hat), aber da habe ich die gleiche Frage stellen.
partitionBy()
.Im Allgemeinen, Ivan ' s Antwort ist eine feine cludge. ABER...
Wenn du strikt das Lesen und schreiben in der Funke, Sie können benutzen Sie einfach den basePath option beim Lesen Ihrer Daten.
https://spark.apache.org/docs/2.2.0/sql-programming-guide.html#partition-discovery
Beispiel: