我在 S3 上有一个目录结构,如下所示:
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 ....
这意味着对于目录,我根据作业的时间戳在给定路径中foo
有多个输出表、、、、base
等A
。B
在这种情况下,我希望left join
他们都基于时间戳和主目录foo
。这意味着将每个输出表base
、A
、B
等读入left join
可以应用 a 的新单独输入表。一切以base
表格为起点
像这样的东西(不工作的代码!)
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"))
有人可以指出我如何获得该数据帧序列的正确方向吗?甚至可能值得将读取视为惰性或顺序读取,因此仅在应用连接时读取A
或B
表以减少内存需求。
注意:目录结构不是最终的,这意味着如果适合解决方案,它可以更改。