scala—如何将case类作为变量传递给scalareflection

iih3973s  于 2021-05-27  发布在  Spark
关注(0)|答案(1)|浏览(493)

我试图将case类作为变量传递给scalareflection,以获取模式。
我能够用case类名成功地运行代码,当我将case类赋给一个变量并将其传递给scalareflection时,我得到了一个错误。
这是我的密码

import org.apache.spark.sql.catalyst.ScalaReflection
import org.apache.spark.sql.types.StructType

case class Emp (empId: Integer, empName: String)
val myschema = ScalaReflection.schemaFor[Emp].dataType.asInstanceOf[StructType]
println(myschema)

val empModel = Emp
val myschema2 = ScalaReflection.schemaFor[empModel].dataType.asInstanceOf[StructType]

Error: error: not found: type empModel
val myschema2 = ScalaReflection.schemaFor[empModel].dataType.asInstanceOf[StructType]

任何建议都是有用的!

zfycwa2u

zfycwa2u1#

类型同义词(=别名)应与关键字一起引入 type ```
type empModel = Emp
val myschema2 = ScalaReflection.schemaFor[empModel].dataType.asInstanceOf[StructType]

在scala中,值和类型构成不同的名称空间。
顶级定义 `type` (和 `val` )在scala 2中是不允许的,所以它们必须在某个对象中

object App {
type empModel = Emp
val myschema2 = ScalaReflection.schemaFor[empModel].dataType.asInstanceOf[StructType]
}

相关问题