spark-shell 按分区加载现有配置单元 table?

spark-shell load existing hive table by partition?

spark-shell 中,我如何加载一个现有的 Hive table,但只加载它的一个分区?

val df = spark.read.format("orc").load("mytable")

我正在寻找一种方法,以便它只加载此 table 的一个特定分区。

谢谢!

Spark API 中没有只加载分区目录的功能,但换句话说,分区目录只是 where 子句中的列,这里你可以对简单的 sql 查询在 where 子句中带有分区列,它将仅从分区目录中读取数据。看看这是否适合你。

val df = spark.sql("SELECT * FROM mytable WHERE <partition_col_name> = <expected_value>")

spark.read.format中没有直接的方法,但你可以使用where条件

val df = spark.read.format("orc").load("mytable").where(yourparitioncolumn)

除非直到你执行一个操作,什么都没有加载,因为load(指向你的orc文件位置)是只是 DataFrameReader 中的一个函数,如下所示,它在执行之前不会加载。

看这里DataFrameReader

 def load(paths: String*): DataFrame = {
...
}

在上面的代码中,即 spark.read... where 只是 where 当您指定此条件时,数据不会立即加载:-)

当你说 df.count 那么你的分区列将被应用到 orc 的数据路径上。