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 全局变量的主要内容,如果未能解决你的问题,请参考以下文章