在Spark中读取ORC文件时如何保留分区列

ale*_*lov 5 apache-spark apache-spark-sql orc

在 Spark 中读入 ORC 文件时,如果在路径中指定分区列,则该列将不会包含在数据集中。例如,如果我们有

val dfWithColumn = spark.read.orc("/some/path") 

val dfWithoutColumn = spark.read.orc("/some/path/region_partition=1")
Run Code Online (Sandbox Code Playgroud)

那么 dfWithColumn 将有一个 region_partition 列,但 dfWithoutColumn 不会。我如何指定我要包含所有列,即使它们已分区?

我在 Scala 上使用 spark 2.2。

编辑:这是一个可重用的 Spark 程序,它将从命令行接收参数;即使用户传入表的特定分区而不是整个表,我也希望程序能够工作。因此,使用 Dataset.filter 不是一种选择。

mor*_*007 0

不要在路径中添加分区列,而是将它们添加为过滤器。将您的代码修改为 -

val dfWithColumn = spark.read.orc("/some/path/").where($"region_partition" === 1)
Run Code Online (Sandbox Code Playgroud)

这将正确识别架构,并且仅读取“region_partition = 1”目录的数据。