当前位置: 首页 > 知识库问答 >
问题:

如何返回ObjectInspector引用的对象

聂建茗
2023-03-14

我正在编写一个自定义配置单元UDF来根据属性文件中定义的值解析映射中的键/值对。正在验证的格式(map ,String)。目的是让第一个参数是要计算的映射,第二个参数包含属性文件

我遇到的问题是,GenericUDF类似乎希望这两个值对查询都是动态的,因为initialize()函数将参数转换为ObjectInspectors,从外观上看,这没有可能的选项来返回它们所检查的对象。

我希望initialize函数加载属性文件,evaluate函数返回pass/fail。这段代码还不足以涵盖我所尝试的所有内容,但希望它能给那些知道自己在做什么的人一个关于这个问题的好主意:

public ObjectInspector initialize(ObjectInspector[] arguments) throws UDFArgumentException {
  mapOI = (MapObjectInspector) arguments[0];
  StringObjectInspector stringOI = (StringObjectInspector) arguments[1];

  try {
    // Begin Debug
    System.out.println(stringOI.getPrimitiveJavaObject(((DeferredObject) arguments[1]).get()));
    // End Debug

    loadProperties(stringOI.getPrimitiveJavaObject(((DeferredObject) arguments[1]).get()));
  }
  catch (HiveException exception) {
    throw new UDFArgumentTypeException(1, "Failed to cast properties file path for evaluation by loadProperties... What did you do?");
  }

共有1个答案

公孙森
2023-03-14

initialize方法只调用一次,因此参数只能被视为描述evaluate方法期望接收的输入类型的元数据。因此,真正可以看到输入值的唯一位置是evaluate方法,该方法可能被调用多次,通常每行调用一次。实际上,您应该只使用initialize函数来验证类型,而不是实际值。也就是说,在您的示例中,检查输入是否为map类型,而原始类别元素为String类型。应在evaluate方法中对实际值进行验证。

 类似资料:
  • 我试图使用函数中的返回类型来返回对象或字符串。如果它是一个对象,我想开始从这个对象调用方法。如果它是一个字符串,我想在其他地方调用一些其他函数。我一直挂断电话,因为返回的对象不是我要返回的对象,它是“left”类型,我似乎无法将该对象从“left”类型恢复到我想要的“Player”类型。这包含在扩展可变队列的对象中。下面是我的函数,它根据ActionQueue对象中的键在地图中查找Player对象

  • 我使用了以下SQL语句。getSingleResult()从EntityManager获取对象:

  • 问题内容: 按引用返回的切片为空: 如何通过引用从函数返回切片? 问题答案: 通过分配给,您可以更改指向的位置,而不是指向的值。要做后者,而不是write 。

  • 问题内容: 我正在尝试从call()返回2D数组,但遇到了一些问题。到目前为止,我的代码是: 这段代码会编译,这不会返回我的数组。我确定我可能使用了错误的语法,但是找不到任何好的示例。 编辑:改变了一点 问题答案: 添加到Joseph Ottinger的答案中,要传递要在Callable的call()方法中使用的值,可以使用闭包:

  • 这是UML图中的实例方法: 此方法的目的是返回客户银行账户的所有汇总详细信息。 BankAccount是包含名称、帐户编号、余额和状态的类: 在BankManager类中,有一个实例变量: 方法),这将打印出所有的客户详细信息?

  • 本文向大家介绍PHP引用返回,包括了PHP引用返回的使用技巧和注意事项,需要的朋友参考一下 示例 有时,您有时需要隐式返回引用。 当您想使用函数查找引用应绑定到哪个变量时,按引用返回非常有用。不要使用引用返回来提高性能。引擎将自动自动对此进行优化。仅在有充分的技术理由时才返回引用。 取自PHP文档,供按引用返回。 通过引用返回可以采用许多不同的形式,包括以下示例: 通过引用返回不仅限于函数引用。您