【发布时间】:2014-12-31 14:32:45
【问题描述】:
我有一个配置单元表,其中一列是字符串数组。我还有一组自定义 UDF 来操作单个字符串。我想让 hive 对数组中的每个元素执行我的自定义 UDF,然后将结果作为修改后的数组返回。
这似乎是一个简单的要求,但我无法找到一个简单的解决方案。我发现了两种可能性,它们都不简单:
- 使用分解视图和横向视图执行 Hive SQL 体操,然后调用 UDF,然后聚合回数组。这似乎太过分了,因为我没有看到它在少于 2 个 mapreduce 作业中执行(但我在这里可能是错的)。
- 将我的每个 UDF 实现为 GenericUDF,它提供一个数组,处理其中的每个元素并再次返回一个数组。这需要更多的开发。
有什么简单的方法吗?
【问题讨论】:
-
选择 (1) 对我来说似乎是合理的。您是否有理由要避免 2 个 mapreduce 作业?
-
您希望在尽可能少的 mapreduce 作业中执行查询,以将 IO 降至最低。这就是慢查询和快查询之间的区别。
-
是的,我知道 2 > 1. 我的问题是为这种特定情况重写您的 UDF 比简单地等待 1 个额外的 MR 作业更有效吗?如果第二份工作需要 1 分钟怎么办?
-
好吧,我碰巧对我的数据有足够的了解,知道一个 mapreduce 作业与两个作业会产生很大的不同。对于一般情况,是的,可能没有必要实现自定义 UDFS。
-
我提交了 issues.apache.org/jira/browse/HIVE-13993 以向 Hive 添加对此的内置支持。