如何为hive中的数组中的每个元素调用UDF?

时间:2014-12-31 14:32:46

标签: hive hiveql

我有一个hive表,其中一列是一个字符串数组。我还有一组操作单个字符串的自定义UDF。我想让hive在数组中的每个元素上执行我的自定义UDF,然后将结果作为修改后的数组返回。

这似乎是一个简单的要求,但我无法找到一个简单的解决方案。我发现了两种可能性,其中没有一种是简单的:

  1. 使用爆炸和侧视图执行hive SQL体操,然后调用UDF,然后聚合回数组。这似乎太过分了,因为我没有看到它在少于2个mapreduce工作中执行(但我可能在这里错了)。
  2. 将我的每个UDF实现为GenericUDF,它随数组提供,处理其中的每个元素并再次返回一个数组。这需要更多的发展。
  3. 有没有简单的方法可以做到这一点?

1 个答案:

答案 0 :(得分:1)

如果没有更多的自定义UDF代码,或者正如您所说,需要更多MR作业,我无法做到这一点。

但我建议可能的第三个选项 - 编写一个带有两个参数的GenericUDF:一个数组和另一个UDF的类名。通过反射实例化并调用UDF,将其传递给数组中的所有内容,然后返回结果数组。这可能有点难以写,但至少你不必重写所有现有的UDF,正如你所提到的那样。