【发布时间】:2018-02-02 12:06:55
【问题描述】:
我有一个 scala-2.11 函数,它根据提供的类类型从 Map 创建一个案例类。
def createCaseClass[T: TypeTag, A](someMap: Map[String, A]): T = {
val rMirror = runtimeMirror(getClass.getClassLoader)
val myClass = typeOf[T].typeSymbol.asClass
val cMirror = rMirror.reflectClass(myClass)
// The primary constructor is the first one
val ctor = typeOf[T].decl(termNames.CONSTRUCTOR).asTerm.alternatives.head.asMethod
val argList = ctor.paramLists.flatten.map(param => someMap(param.name.toString))
cMirror.reflectConstructor(ctor)(argList: _*).asInstanceOf[T]
}
我正在尝试在 spark 数据帧的上下文中使用它作为 UDF。但是,我不确定通过案例课程的最佳方式是什么。下面的方法似乎不起作用。
def myUDF[T: TypeTag] = udf { (inMap: Map[String, Long]) =>
createCaseClass[T](inMap)
}
我正在寻找这样的东西-
case class MyType(c1: String, c2: Long)
val myUDF = udf{(MyType, inMap) => createCaseClass[MyType](inMap)}
感谢您提出解决此问题的想法和建议。
【问题讨论】:
标签: scala apache-spark user-defined-functions case-class