0

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

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

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

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

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

4

1 回答 1

0

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

最好的方法是在开始 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");
于 2017-03-02T17:36:42.437 回答