gpt4 book ai didi

scala - 将案例类传递给 Spark UDF

转载 作者:行者123 更新时间:2023-12-01 13:31:14 24 4
gpt4 key购买 nike

我有一个 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)}

解决此问题的想法和建议表示赞赏。

最佳答案

However, I'm not sure what's the best way to pass the case class



不可能使用案例类作为用户定义函数的参数。 SQL StructTypes映射到动态类型(因为没有更好的词) Row对象。

如果你想对静态类型的对象进行操作,请使用静态类型 Dataset .

关于scala - 将案例类传递给 Spark UDF,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45864472/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com