Hive UDF全局变量

时间:2016-04-01 10:23:41

标签: hadoop hive hive-udf

如果在Hive UDF中有任何方法可以使用全局变量,那么有人可以告诉我吗?

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

  1. 包含4列的文件(假设列名称为A,B,C和D)
  2. 包含2列(B,D)的文件
  3. 包含2列(B,C)
  4. 的文件

    我将所有三个文件转换为标准格式(文件1格式 - 具有4列的输出)。 要转换为标准格式,我需要引用文件第一行中的标题记录。因此,如果我的输入文件是256MB并且调用了多个映射器,那么每个映射器是否都可以引用全局变量(Header信息)。
    简而言之,有一种方法可以为调用我的Hive UDF的所有映射器创建一个公共变量吗?

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

1 个答案:

答案 0 :(得分:0)

是的,有办法做到这一点,我自己也做过。

最好的方法是通过读取文件找到 BEFORE 启动map-reduce作业的信息,然后设置要使用的Mappers和Reducers的配置值。

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

// assume c = Configuration()

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

然后在你的地图制作工具的初始化方法中你可以读出来:

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