在给定案例类的完全限定名的情况下,如何在运行时推断Spark Scala的StructType模式

在给定案例类的完全限定名的情况下,如何在运行时推断Spark Scala的StructType模式,scala,apache-spark,reflection,configuration,schema,Scala,Apache Spark,Reflection,Configuration,Schema,几天以来,我一直想知道是否有可能在Scala中为给定的case类推断Spark的模式,但在编译时未知 唯一的输入是包含类的FQN的字符串(例如,可以使用该字符串在运行时通过反射创建case类的实例) 我在想,如果有可能的话: package com.my.namespace 案例类MyCaseClass(名称:String,num:Int) //代码库中的其他地方 //来自外部配置文件,因此在编译时未知 val fqn=“com.my.namespace.MyCaseClass” val sch

几天以来,我一直想知道是否有可能在Scala中为给定的case类推断Spark的模式,但在编译时未知

唯一的输入是包含类的FQN的字符串(例如,可以使用该字符串在运行时通过反射创建case类的实例)

我在想,如果有可能的话:

package com.my.namespace
案例类MyCaseClass(名称:String,num:Int)
//代码库中的其他地方
//来自外部配置文件,因此在编译时未知
val fqn=“com.my.namespace.MyCaseClass”
val schema=Encoders.product[getXYZ(fqn)].schema
当然,没有使用
编码器的任何其他技术都可以(构建
StructType
分析case类的实例?这可能吗?)

最好的方法是什么?
这是可行的吗?

我问了一个类似的问题,因为您不能以标准方式调用它,但您可以在FQN上进行模式匹配,并使用它来进行适当的
编码器。product[X]
调用。要么是宏,要么是宏。@YuvalItzchakov是的,这是一种可能性,但模式匹配意味着必须在编译时知道它,因此您不能编写可扩展的库(例如,考虑类路径中的内容),例如,如果可以使用反射,您可以这样做。我对宏方法很感兴趣,但我无法真正理解如何使用它。@btbbass当然,我假设类型在编译时已知。否则,恶作剧是不可避免的。