hive udf全局变量

kzmpq1sx  于 2021-06-02  发布在  Hadoop
关注(0)|答案(1)|浏览(646)

有没有人能告诉我在hiveudf中有没有全局变量?
我正在设法找出解决下列问题的办法。场景如下。我有三种类型的文件
一个有4列的文件(假设列名是a、b、c和d)
有两列(b,d)的文件
有两列(b,c)的文件
我将把这三个文件都转换成标准格式(文件1格式-有4列的输出)。要转换成标准格式,我需要引用文件第一行中的头记录。因此,如果我的输入文件是256mb,并且调用了多个Map器,是否有任何方法使每个Map器都可以引用一个全局变量(头信息)。
简言之,有没有一种方法可以为所有调用我的hiveudf的Map器提供一个公共变量?
注意:udf将在一个单列表上运行,方法是读取完整的行,然后将其写入hdfs位置的下一个表。

6tr1vspr

6tr1vspr1#

是的,有办法做到这一点,我自己也做到了。
最好的方法是在开始map-reduce作业之前通过读取文件来查找信息,然后可以为mapper和reducer设置要使用的配置值。
例如,在主方法中启动作业之前,您可以执行以下操作(伪scala):

// assume c = Configuration()

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

然后在Map器的initialize方法中,您可以读出以下内容:

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

相关问题