Как вызвать искровой UDF из scala с помощью отражения? - PullRequest
1 голос
/ 18 июня 2019

Я создаю приложение spark, которое зависит от библиотеки Java. Интерфейс Java представлен как

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

Я создал UDF как

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

Эта функция может вызываться как myfunc(properties)(data) из оболочки оболочки, где свойствами является Карта, а данные имеют тип Столбец.

Проблема в том, что мне нужно вызывать это через отражение в файле scala. Мне нужно сделать что-то вроде этого:

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

m.invoke возвращает саму функцию. Как и где передать параметр Column? Или есть какой-то другой способ передать карту этих свойств искровому UDF, чтобы его можно было напрямую вызвать с помощью отражения?

1 Ответ

0 голосов
/ 18 июня 2019

Попробуйте

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

для data типа Column.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...