Зарегистрируйте UDF динамически в искре, используя отражение scala - PullRequest
2 голосов
/ 16 июня 2020

Проблема: Моя программа принимает строку JSON как inpu, которая содержит имя udf, определение функции и тип. например.

{
  "udfList": [
   {
     "name": "add"
     "definition": "(x: Int, y:int) => x+y"
     "type": "(Int, Int) => Int"
   }
  ]
}

JSON может содержать любую функцию и тип. Как я могу использовать отражение scala, чтобы преобразовать эту строку в фактическую функцию и привести ее к заданному типу, а затем зарегистрировать ее как udf с заданным именем.

Пробовал:

val myFunc = """(x: Int, y:int) => x+y"""
val tb = runtimeMirror(getClass.getClassLoader).mkToolBox()
val tree = tb.parse(myFunc)
val fun =  tb.eval(tree)

Я не могу преобразовать его динамически, потому что тип передается как String. Так есть ли способ сделать это динамически?

...