在spark-shell
中,如何加载现有的 Hive 表,但只加载其中一个分区?
val df = spark.read.format("orc").load("mytable")
我正在寻找一种方法,以便它只加载该表的一个特定分区。
谢谢!
在spark-shell
中,如何加载现有的 Hive 表,但只加载其中一个分区?
val df = spark.read.format("orc").load("mytable")
我正在寻找一种方法,以便它只加载该表的一个特定分区。
谢谢!
没有直接的方法,spark.read.format
但你可以使用where
条件
val df = spark.read.format("orc").load("mytable").where(yourparitioncolumn)
除非在您执行任何操作之前不会加载任何内容,因为load
(指向您的 orc 文件位置)只是一个函数,DataFrameReader
如下所示,在执行操作之前它不会加载。
def load(paths: String*): DataFrame = {
...
}
在上面的代码中,即spark.read
....where
只是where
您指定的条件,再次不会立即加载数据:-)
当你说df.count
你的分区列将被应用到兽人的数据路径上。
Spark API 中没有可用的函数仅加载分区目录,但其他方式是分区目录只不过是 where 子句中的列,在这里您可以使用 where 子句中的分区列进行简单的 sql 查询,它将仅从分区中读取数据直接性。看看这是否适合你。
val df = spark.sql("SELECT * FROM mytable WHERE <partition_col_name> = <expected_value>")