Ich habe ein Verzeichnis mit ORC-Dateien. Ich schaffe einen Datenrahmen den Code unten mitSpark SQL auf ORC-Dateien gibt nicht korrekt Schema (Spaltennamen)
var data = sqlContext.sql("SELECT * FROM orc.`/directory/containing/orc/files`");
Es Datenrahmen mit diesem Schema gibt
[_col0: int, _col1: bigint]
Wo, wie das erwartete Schema ist
[scan_nbr: int, visit_nbr: bigint]
Wenn ich auf Dateien im Parkett abfragen Format Ich bekomme das richtige Schema.
Fehle ich irgendwelche Konfiguration (en)?
mehr Hinzufügen Details
Dies ist Hortonworks Verteilung HDP 2.4.2 (Funken 1.6.1, Hadoop 2.7.1, Hive 1.2.1)
Wir nicht die Standardkonfigurationen von geändert haben HDP, aber das ist definitiv nicht das Gleiche wie die Plain-Vanilla-Version von Hadoop.
Daten werden von Upstream-Hive-Jobs geschrieben, ein einfaches CTAS (CREATE TABLE-Beispiel gespeichert als ORC als SELECT ...).
Ich testete dies auf eingereicht von CTAS generiert mit dem neuesten 2.0.0 Bienenstock & es behält die Spaltennamen in den ORC-Dateien.
Funktioniert gut für mich. Kannst du etwas Detail hinzufügen? Konfiguration, Versionen, wie Sie Daten gespeichert haben ... – zero323
Hinzugefügt Weitere Details –
Meine 2 Cent: Überprüfen Sie, dass * alle * Dateien das exakt gleiche Schema haben; Da Hive die "theoretischen" Spaltennamen in seinem MetaStore speichert, ignoriert es möglicherweise Diskrepanzen. Da Sie aber Spark benötigen, um die Dateien direkt zu öffnen, können diese Dateien, wenn sie unterschiedliche Spaltennamen haben, auf Spaltennummern zurückgreifen. https://cwiki.apache.org/confluence/display/Hive/LanguageManual+ORC#LanguageManualORC-ORCFileDumpUtility –