ich eine Verzeichnisstruktur auf S3 wie folgt aussehen:Funken lesen mehrere Verzeichnisse in mutiple Datenrahmen
foo
|-base
|-2017
|-01
|-04
|-part1.orc, part2.orc ....
|-A
|-2017
|-01
|-04
|-part1.orc, part2.orc ....
|-B
|-2017
|-01
|-04
|-part1.orc, part2.orc ....
Was bedeutet, dass für die Verzeichnis foo
ich mehrere Output-Tabellen haben, base
, A
, B
, usw. in einem bestimmten Pfad basierend auf dem Zeitstempel eines Jobs.
Ich möchte left join
sie alle, basierend auf einem Zeitstempel und dem Hauptverzeichnis, in diesem Fall foo
. Dies würde bedeuten, dass in jeder Ausgabetabelle base
, A
, B
usw. neue separate Eingabetabellen gelesen werden, auf die left join
angewendet werden kann. Alle mit der base
Tabelle als Ausgangspunkt
so etwas (nicht funktionierenden Code!)
val dfs: Seq[DataFrame] = spark.read.orc("foo/*/2017/01/04/*")
val base: DataFrame = spark.read.orc("foo/base/2017/01/04/*")
val result = dfs.foldLeft(base)((l, r) => l.join(r, 'id, "left"))
jemand mich in der richtigen Richtung zeigen kann, wie man diese Sequenz von Datenrahmen zu bekommen? Es kann sogar sinnvoll sein, die Lesevorgänge als faul oder sequenziell zu betrachten und daher nur die Tabelle A
oder B
zu lesen, wenn der Join angewendet wird, um die Speicheranforderungen zu reduzieren.
Hinweis: Die Verzeichnisstruktur ist nicht endgültig, dh sie kann sich ändern, wenn dies zur Lösung passt.
hive Partitionsstruktur aussieht und Sie Ork verwenden Datum partitionierte Dateien. Warum können diese nicht in Hive gemappt werden und 'hiveContext.sql' für jedes Datum verwenden und dann beitreten –
Wir laufen nicht Hive, nur Spark standalone – Tim