代码之家  ›  专栏  ›  技术社区  ›  Saurabh Garg

如何使用反射从scala调用spark UDF?

  •  0
  • Saurabh Garg  · 技术社区  · 6 年前

    String doSomething(String, Map<String,String>)
    

    我创建了一个自定义项

    def myfunc(properties: Map[String, String]) = udf((data: String) => {
        ...
        doSomething(data,properties)
    })
    

    此函数可以调用为 myfunc(properties)(data) 来自spark shell,其中属性是映射,数据是列类型。

    问题是我需要通过scala文件中的反射调用它。我需要这样做:

    val c = Class.forName("package.class")
    val m = c.getMethod("myfunc",classOf[Map[String,String]])
    m.invoke(c.newInstance, someMap)
    

    0 回复  |  直到 6 年前
        1
  •  1
  •   Dmytro Mitin    6 年前

    尝试

    m.invoke(c.newInstance, someMap).asInstanceOf[UserDefinedFunction].apply(data)
    

    对于 data Column .