Hive UDF 全局变量

Posted

技术标签:

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

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

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

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

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

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

【问题讨论】:

【参考方案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()中使用吗?

以上是关于Hive UDF 全局变量的主要内容,如果未能解决你的问题,请参考以下文章

在 SQL Server 中创建和管理全局 Procs 和 UDF 的最佳方法是啥?

如何在 Java 的 UDF 中获取 hive 变量的值?

寻找一种从另一个插件访问全局变量的方法

VBA Excel UDF保留原始值

(五)Hive的UDF、UDAF和UDTF自定义函数

Rust 全局变量