【问题标题】:Hive UDF Global variableHive UDF 全局变量
【发布时间】:2016-04-01 10:23:40
【问题描述】:

谁能告诉我是否有任何方法可以在 Hive UDF 中使用全局变量?

我正在尝试找出以下问题的解决方案。 场景如下。我有三种类型的文件

  1. 一个有 4 列的文件(假设列名是 A、B、C 和 D)
  2. 具有 2 列(B、D)的文件
  3. 包含 2 列(B、C)的文件

我会将所有三个文件转换为标准格式(文件 1 格式 - 4 列的输出)。 要转换为标准格式,我需要参考文件第一行中的标题记录。因此,如果我的输入文件为 256MB,并且调用了多个映射器,是否有任何方法可以使每个映射器都引用一个全局变量(标头信息)。
简而言之,有没有办法为调用我的 Hive UDF 的所有映射器提供一个公共变量?

注意:UDF 将通过读取完整的行然后将其写入下一个表的 HDFS 位置,在单个列表上运行。

【问题讨论】:

    标签: hadoop hive hive-udf


    【解决方案1】:

    是的,有一种方法可以做到这一点,我自己已经做到了。

    最好的方法是在开始map-reduce 作业之前通过读取文件找到信息,然后您可以设置一个配置值供Mappers 和Reducers 使用。

    例如,在你的 main 方法中启动你的工作之前,你会做这样的事情(伪scala):

    // assume c = Configuration()
    
    val headerInformationJson = getHeaderInformation(filePath1)
    c.set("headerInfo", headerInformationJson)
    

    然后在你的映射器的初始化方法中你可以读回这个:

    val conf = context.getConfiguration()
    val headerInfo = conf.get("headerInfo");
    

    【讨论】:

    • 对于 Hive UDF,您可以使用 UDF 提供的钩子来做类似的事情
    • 这个方法在configure()中使用吗?
    猜你喜欢
    • 2014-07-22
    • 2016-03-17
    • 1970-01-01
    • 2015-06-12
    • 2019-04-14
    • 2019-07-24
    • 2017-11-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多