将整行的 Hive UDF 作为输入

Posted

技术标签:

【中文标题】将整行的 Hive UDF 作为输入【英文标题】:Hive UDF for the entire row as input 【发布时间】:2016-02-10 16:25:58 【问题描述】:

我正在寻找编写通用数据清理框架的方法,该框架根据为给定数据集配置的位置和类型清理整行。

从数据集中采样输入记录如下,

100| John |  Mary | 10Sep2013 | 10,23,4

现在配置将基于位置(从索引 1 开始)。例如,在位置 2 修剪空格,在位置 4 转换为 hive 标准日期,在位置 5 删除逗号。这是在数据集级别配置的。

现在,如果这些必须插入 hive 或 pig,应该有一种方法可以让 hive\Pig UDF 接受整行作为输入。 UDF 应根据可配置的字段分隔符解析行,并根据位置应用字段\列特定操作。这样,对于此类基于行的操作,是否使用 pig 或 hive 或其他任何东西都无关紧要。我知道这有点涉及抽象 hive\pig 特定的行类型并提供基于位置的通用 getter。

为整行而不是每列调用 UDF 以加快处理速度也可能有意义。

有没有办法让 hive\pig UDF 接受整行文本作为输入?

【问题讨论】:

【参考方案1】:

将整行作为输入的唯一方法是将整个文本保留为一列。但就单独处理列而言,您可以将其用作 UDTF,它将输入作为 1 列,但该 UDTF 的输出将是 Hive 或 Pig 可以使用的多列。

另一种选择是将值保留在不同的列中,但构建一个 UDF,我们足够聪明地理解数据的格式并相应地给出不同的输出。但 UDF 将采用 1 col,输出也将是 1 col

【讨论】:

@Raju,在第二个选项中,如何使用将整行(所有列)传递给 Hive 中的 UDF。在 Pig 中,您可以使用 UDF_Test(*) 执行此操作,您可以在其中获得包含所有列的元组并输出您想要的任何内容。 哦,谢谢你的信息。我很高兴知道这一点。

以上是关于将整行的 Hive UDF 作为输入的主要内容,如果未能解决你的问题,请参考以下文章

Hive UDF 从列表中生成所有可能的有序组合

我们可以从 Hive 中的自定义 UDF 运行查询吗?

Hive - 在 Python UDF 中处理 NULL 输入值

满足条件时更改表格中整行的颜色?

HIVE自定义函数

hive-UDF/UDTF/UDAF