Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
366 views
in Technique[技术] by (71.8m points)

apache spark - Registering UDF's dynamically using scala reflect not working

I am registering my UDF's dynamically using scala reflect as shown below and this code works fine. However when I try to list spark functions using spark.catalog then I don't see it. Can you please help me understanding what I am missing here:

   spark.catalog.listFunctions().foreach{
      fun =>
        if (fun.name == "ModelIdToModelYear") {
          println(fun.name)
        }
    }
def registerUDF(spark: SparkSession) : Unit = {
    val runtimeMirror = scala.reflect.runtime.universe.runtimeMirror(getClass.getClassLoader)
    val moduleSymbol = runtimeMirror.moduleSymbol(Class.forName("com.local.practice.udf.UdfModelIdToModelYear"))
    val targetMethod = moduleSymbol.typeSignature.members.filter{
      x => x.isMethod && x.name.toString == "ModelIdToModelYear"
    }.head.asMethod
    val function = runtimeMirror.reflect(runtimeMirror.reflectModule(moduleSymbol).instance).reflectMethod(targetMethod)
    function(spark.udf)
  }

Below is my UDF definition

package com.local.practice.udf

import org.apache.spark.sql.expressions.UserDefinedFunction
import org.apache.spark.sql.functions.udf

//noinspection ScalaStyle
object UdfModelIdToModelYear {

  val ModelIdToModelYear: UserDefinedFunction = udf((model_id : String) => {
    val numPattern = "(\d{2})_.+".r
     numPattern.findFirstIn(model_id).getOrElse("0").toInt
  })

}

question from:https://stackoverflow.com/questions/66058571/registering-udfs-dynamically-using-scala-reflect-not-working

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Reply

0 votes
by (71.8m points)
Waitting for answers

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
OGeek|极客中国-欢迎来到极客的世界,一个免费开放的程序员编程交流平台!开放,进步,分享!让技术改变生活,让极客改变未来! Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...