从单个 Hive UDF 创建多个列

2024-01-06

我正在使用 Amazon EMR 和 Hive 0.11。我正在尝试创建一个 Hive UDF,它将从一个 UDF 调用返回多个列。

例如,我想调用如下所示的 UDF,并返回几个(命名的)列。

SELECT get_data(columnname) FROM table;

我很难找到有关此操作的文档,但听说如果使用通用 UDF,这是可能的。有谁知道评估()方法需要返回什么才能使其工作?


我只使用GenericUDTF。在你编写GenericUDTF的udf扩展之后,你的udtf应该实现两个重要的方法:初始化和评估。

  • 在初始化时,您可以检查参数类型并设置返回对象类型。 例如,使用 ObjectInspectorFactory.getStandardStructObjectInspector,您可以使用 structFieldNames 参数中的名称和 structFieldObjectInspectors 中的列值类型指定输出列。输出列的大小是 structFieldNames 列表的大小。 有两种类型系统:java和hadoop。 java的ObjectInspector以javaXXObjectInspector开头,否则以writableXXObjectInspector开头。
  • 流程上和普通的udf类似。除此之外,您应该使用从initialize()保存的ObjectInspector将Object转换为具体值,例如String,Integer等。调用​​forward函数输出一行。在行对象forwardColObj 中,您可以指定列对象。

下面是简单的例子:


public class UDFExtractDomainMethod extends GenericUDTF {

    private static final Integer OUT_COLS = 2;
    //the output columns size
    private transient Object forwardColObj[] = new Object[OUT_COLS];

    private transient ObjectInspector[] inputOIs;

    /**
    *
    * @param argOIs check the argument is valid.
    * @return the output column structure.
    * @throws UDFArgumentException
    */
    @Override
    public StructObjectInspector initialize(ObjectInspector[] argOIs) throws UDFArgumentException {
        if (argOIs.length != 1 || argOIs[0].getCategory() != ObjectInspector.Category.PRIMITIVE
                || !argOIs[0].getTypeName().equals(serdeConstants.STRING_TYPE_NAME)) {
            throw new UDFArgumentException("split_url only take one argument with type of string");
        }

        inputOIs = argOIs;
        List<String> outFieldNames = new ArrayList<String>();
        List<ObjectInspector> outFieldOIs = new ArrayList<ObjectInspector>();
        outFieldNames.add("host");
        outFieldNames.add("method");
        outFieldOIs.add(PrimitiveObjectInspectorFactory.javaStringObjectInspector);
        //writableStringObjectInspector correspond to hadoop.io.Text
        outFieldOIs.add(PrimitiveObjectInspectorFactory.javaStringObjectInspector);
        return  ObjectInspectorFactory.getStandardStructObjectInspector(outFieldNames, outFieldOIs);
    }

    @Override
    public void process(Object[] objects) throws HiveException {
        try {
            //need OI to convert data type to get java type
            String inUrl = ((StringObjectInspector)inputOIs[0]).getPrimitiveJavaObject(objects[0]);
            URI uri = new URI(inUrl);
            forwardColObj[0] = uri.getHost();
            forwardColObj[1] = uri.getRawPath();
            //output a row with two column
            forward(forwardColObj);
        } catch (URISyntaxException e) {
            e.printStackTrace();
        }
    }

    @Override
    public void close() throws HiveException {

    }
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

从单个 Hive UDF 创建多个列 的相关文章

  • Spring控制器是线程安全的吗

    我遇到了这个控制器示例 想知道它是否是线程安全的 我特别想知道 gson 实例变量 import org springframework stereotype Controller import org springframework we
  • Google 地图查询返回的 JSON 包含像 \x26 这样的编码字符(如何解码?)

    在 Java 应用程序中 我获取 JSON 来自 Google 地图 其中包含以下字符 x26我想将其转换为其原始字符 据我所知 这是一个 UTF 8 表示法 但我不完全确定 在源 JSON 中 可能会出现各种编码字符 例如 x3c div
  • Java 创建浮雕(红/蓝图像)

    我正在编写一个 Java 游戏引擎 http victoryengine org http victoryengine org 并且我一直在尝试生成具有深度的 3D 图像 您可以使用那些红色 蓝色眼镜看到 我正在使用 Java2D 进行图形
  • 如何从另一个xml文件动态更新xml文件?

    我想从另一个 xml 文件更新 xml 文件 我使用了一个 xml 文件 如下所示 one xml
  • 使用 Checkstyle Plugin 时从插件调用代码时出现问题:“org.eclipse.jface”

    我正在尝试在 Rational Software Architect 7 0 0 4 上使用 eclipse cs 插件 我最近卸载了旧的 beta2 版本并安装了 beta3 插件本身按照之前的配置工作 但是每当我尝试通过 Windows
  • 方法断点可能会大大减慢调试速度

    每当向方法声明行添加断点 在 Intellij IDEA 或 Android Studio 中 时 都会出现一个弹出窗口 方法断点可能会大大减慢调试速度 为什么会这样戏剧性地减慢调试速度 是我的问题吗 将断点放在函数的第一行有什么不同 Th
  • Java 变量的作用域

    我不明白为什么这段代码的输出是10 package uno public class A int x 10 A int x 12 new B public static void main String args int x 11 new
  • 场景生成器删除 fxml 文件中的导入

    我使用场景构建器 Gluon Scene Builder JavaFX Scene Builder 8 1 1 来创建应用程序的 UI 并使用 Eclipse 开发 JavaFX 现在 每次我在场景生成器中保存某些内容时 它都会从 fxml
  • 使用 java 按电子邮件发送日历邀请

    我正在尝试使用 java 发送每封电子邮件的日历邀请 收件人收到电子邮件 但不会显示接受或拒绝的邀请 而是将该事件自动添加到他的日历中 我正在使用 ical4j jar 构建活动 邀请 private Calendar getInvite
  • 使用 Guava 联合两个 ImmutableEnumSets

    我想联合两个ImmutableEnumSets来自番石榴 这是我的尝试 public final class OurColors public enum Colors RED GREEN BLUE YELLOW PINK BLACK pub
  • 参数动态时如何构建 JPQL 查询?

    我想知道是否有一个好的解决方案来构建基于过滤器的 JPQL 查询 我的查询太 富有表现力 我无法使用 Criteria 就像是 query Select from Ent if parameter null query WHERE fiel
  • 覆盖 MATLAB 默认静态 javaclasspath 的最佳方法

    MATLAB 配置为在搜索用户可修改的动态路径之前搜索其静态 java 类路径 不幸的是 静态路径包含相当多非常旧的公共库 因此如果您尝试使用新版本 您可能最终会加载错误的实现并出现错误 例如 静态路径包含 google collectio
  • tomcat 过滤所有 web 应用程序

    问题 我想对所有网络应用程序进行过滤 我创建了一个过滤器来监视对 apache tomcat 服务器的请求 举例来说 它称为 MyFilter 我在 netbeans 中创建了它 它创建了 2 个独立的目录 webpages contain
  • 在 Selenium WebDriver 上如何从 Span 标签获取文本

    在 Selenium Webdriver 上 如何从 span 标记检索文本并打印 我需要提取文本UPS Overnight Free HTML代码如下 div id customSelect 3 class select wrapper
  • ExceptionHandler 不适用于 Throwable

    我们的应用程序是基于 Spring MVC 的 REST 应用程序 我正在尝试使用 ExceptionHandler 注释来处理所有错误和异常 I have ExceptionHandler Throwable class public R
  • 使用 Java 从 S3 上的文件在 S3 上创建 zip 文件

    我在 S3 上有很多文件 需要对其进行压缩 然后通过 S3 提供压缩文件 目前 我将它们从流压缩到本地文件 然后再次上传该文件 这会占用大量磁盘空间 因为每个文件大约有 3 10MB 而且我必须压缩多达 100 000 个文件 所以一个 z
  • 如何在android sdk上使用PowerMock

    我想为我的 android 项目编写一些单元测试和仪器测试 然而 我遇到了一个困扰我一段时间的问题 我需要模拟静态方法并伪造返回值来测试项目 经过一些论坛的调查 唯一的方法是使用PowerMock来模拟静态方法 这是我的 gradle 的一
  • 重写Object类的finalize()方法有什么用?

    据我所知 在java中如果我们想手动调用垃圾收集器 我们可以执行System gc 1 我们在重写的finalize 方法中做了哪些操作 2 如果我们想手动调用JVM垃圾收集器 是否需要重写finalize 方法 我们在重写的 Finali
  • 从一个文本文件中获取数据并将其移动到新的文本文件

    我有一个文件 里面有数据 在我的主要方法中 我读入文件并关闭文件 我调用另一种方法 在原始文件的同一文件夹内创建一个新文件 所以现在我有两个文件 原始文件和通过我调用的方法生成的文件 我需要另一种方法 从原始文件中获取数据并将其写入创建的新
  • 与文件名中的冒号“:”作斗争

    我有以下代码 用于加载大量 csv gz 并将它们转储到其他文件夹中 并将源文件名作为一列 object DailyMerger extends App def allFiles path File List File val parts

随机推荐

  • 导航到某个路径后清除位置状态

    我正在使用反应路由器browserHistory导航到路径 browserHistory push pathname mycomponent state someValue value 所以这将导航到 mycomponent 一旦我到达我的
  • 向 xib 中的“主视图”添加约束

    我有一个UIView在 xib 文件中定义 我需要设置translatesAutoresizingMaskIntoConstraints NO 这意味着框架不会转换为约束 因此我需要自己设置尺寸约束 我创建了一个工作类别方法UIView N
  • Sticky 命令如何影响 Tkinter 中的 python 代码?

    from tkinter import from tkinter import ttk root Tk root rowconfigure 0 weight 1 root columnconfigure 0 weight 1 frame t
  • 非全屏 UINavigationController

    是否可以以不使用整个窗口的方式使用 UINavigationController 我尝试过设置它的视图框架以及将其视图添加到另一个 非全屏 视图而不是窗口 但似乎都不起作用 您不能直接更改 UINavigationController 或其
  • 不要重写静态 css/js/img 文件

    我试图让我的 htaccess 文件不重写我的静态文件 js css images 这是我当前的 htaccess 文件 RewriteEngine on RewriteCond SCRIPT FILENAME f RewriteCond
  • 将字符串转换为字节数组,然后返回原始字符串

    在Java或Android中是否可以将字符串转换为字节数组 然后将其转换回原始字符串 我的目标是将一些字符串发送到微控制器 Arduino 并将其存储到 EEPROM 这是唯一的 1 KB 中 我尝试使用MD5 http en wikipe
  • ASP.Net 的最佳“加载”反馈?

    因此 我们有一个 ASP Net 应用程序 相当标准 并且有很多更新面板和回发 在某些页面上我们有
  • 如何通过 Cygwin 在 Windows 上安装 sshpass?

    在 CygWin 的包窗口中 当我输入 sshpass 时 什么也没有出现 我尝试安装类似的软件包 如 openssh 等 希望其中之一包含 sshpass 但没有运气 sshpass 不作为 Cygwin 软件包提供 这意味着您需要从源代
  • 在 Matlab 中从 .ravi 文件中提取温度

    我的问题 很像这里的帖子 如何从 ravi 文件获取数据 https stackoverflow com questions 58899981 how can i get data from ravi file 我有一个 ravi 文件 辐
  • 在 ggplot 中添加第二个 geom_tile 层

    我有一个相对简单的热图geom tile在ggplot2中 它只是一个由连续数据组成的小矩阵 如彩色框 df1 我想覆盖第二个逻辑 geom tile 来概述TRUE值 df2 这样的事可以做吗 我知道将两个热图添加在一起看起来很丑陋 但这
  • 我如何在 RFM.RFMID=PV.RFMID [重复] 上使用不同的 INNER JOIN RFM

    这个问题在这里已经有答案了 可能的重复 从多个表中获取数据 https stackoverflow com questions 11738574 get data from multiple table SELECT PM PMID RFM
  • 添加故事板视图作为以编程方式创建的视图的子视图

    我创建了一个特殊的 UIView 类 它具有某些属性 并且我以编程方式执行此操作 因为它通常是空白的 但有时会包含其他视图 我知道如果我以编程方式创建 UIView 我可以做类似的事情 specialView addSubview aVie
  • CKEditor + Yii 加载 AJAX:$_POST 不包含更新的值

    简而言之 我正在使用 Yii 框架 我的页面上有一个 Ckeditor 窗口 php yii 框架 工作正常 当我点击按钮时 会生成一个新的 CKeditor 窗口并通过 AJAX 调用显示 问题 这个新的 CKEditor 窗口正确显示数
  • 如何隐藏 HTML 页面的源代码

    我创建了一个 HTML 页面 现在想隐藏源代码并对其进行加密 我怎样才能做到这一点 您可以禁用右键单击 但这是一个坏主意 因为专家可以从您的页面读取任何内容 您无法完全隐藏页面源 这是不可能的 互联网上没有什么是足够安全的 无论如何 您都可
  • 等高列和垂直对齐列中的图像?

    想知道是否有人可以向我展示在图像列中垂直对齐图像并使列的高度等于文本列的最佳方法 CSS padding 0 margin 0 col width 50 float left height 100 col text background s
  • Mac 上的 Qt MySQL

    我浪费了大约 6 个小时试图按照网上的各种说明让 MySQL 与 Qt 一起工作 我现在就想把自己的手腕砍掉 有谁对如何将 QMYSQL 驱动程序安装到 Qt 中有简单和详细的解释吗 我有 Mac 10 6 我是初学者 我将衷心感谢您的帮助
  • Android 中的 Facebook Like 按钮集成

    我想在我的 Android 应用程序中集成 Facebook Like 按钮 请告诉我如何将其集成到 Android 中的步骤 我会尝试使用包含您从中获得的标准 html 集成的 webview 来完成此操作facebook http de
  • scp 或 sftp 使用单个命令复制多个文件

    我想将文件从远程服务器复制到不同的目录中 例如 我想同时运行这 4 个命令 scp remote A 1 txt local A 1 txt scp remote A 2 txt local A 2 txt scp remote B 1 t
  • 解析推送通知最终在 Android 后台崩溃

    我正在使用 Parse 在 android 中推送通知 但当我关闭 wifi 时 它最终会在后台崩溃 它给了我错误 java lang RuntimeException 无法启动接收器 com parse ParseBroadcastRec
  • 从单个 Hive UDF 创建多个列

    我正在使用 Amazon EMR 和 Hive 0 11 我正在尝试创建一个 Hive UDF 它将从一个 UDF 调用返回多个列 例如 我想调用如下所示的 UDF 并返回几个 命名的 列 SELECT get data columnnam