将整行的 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 作为输入的主要内容,如果未能解决你的问题,请参考以下文章