0

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

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

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

谢谢!

4

2 回答 2

3

没有直接的方法,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你的分区列将被应用到兽人的数据路径上。

于 2020-04-30T03:50:07.787 回答
0

Spark API 中没有可用的函数仅加载分区目录,但其他方式是分区目录只不过是 where 子句中的列,在这里您可以使用 where 子句中的分区列进行简单的 sql 查询,它将仅从分区中读取数据直接性。看看这是否适合你。

val df = spark.sql("SELECT * FROM mytable WHERE <partition_col_name> = <expected_value>")
于 2020-04-30T03:47:27.257 回答