【问题标题】:How to load specific Hive partition in DataFrame Spark 1.6?如何在 DataFrame Spark 1.6 中加载特定的 Hive 分区?
【发布时间】:2016-04-12 01:57:26
【问题描述】:

根据官方doc,Spark 1.6 以后我们无法向 DataFrame 添加特定的 hive 分区

直到 Spark 1.5 之前,以下内容可以正常工作,并且数据框将具有实体列和数据,如下所示:

DataFrame df = hiveContext.read().format("orc").load("path/to/table/entity=xyz")

但是,这在 Spark 1.6 中不起作用。

如果我给出如下基本路径,它不包含我想要在 DataFrame 中的实体列,如下所示 -

DataFrame df = hiveContext.read().format("orc").load("path/to/table/") 

如何在数据框中加载特定的配置单元分区?删除此功能的驱动因素是什么?

我相信它是有效的。在 Spark 1.6 中是否有替代方案可以实现这一目标?

据我了解,Spark 1.6 会加载所有分区,如果我过滤特定分区,它效率不高,它会命中内存并引发 GC(垃圾收集)错误,因为数千个分区被加载到内存而不是特定分区.

【问题讨论】:

    标签: apache-spark hive apache-spark-sql


    【解决方案1】:

    要使用 Spark 1.6 在 DataFrame 中添加特定分区,我们必须首先设置 basePath,然后给出需要加载的分区路径

    DataFrame df = hiveContext.read().format("orc").
                   option("basePath", "path/to/table/").
                   load("path/to/table/entity=xyz")
    

    所以上面的代码只会加载 DataFrame 中的特定分区。

    【讨论】:

      猜你喜欢
      • 2016-07-15
      • 1970-01-01
      • 2019-02-10
      • 2017-03-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多