【问题标题】:How to pass case class as a variable into ScalaReflection如何将案例类作为变量传递给ScalaReflection
【发布时间】:2021-01-07 03:20:37
【问题描述】:

我正在尝试将案例类作为变量传递给 ScalaReflection 以获取架构。

我能够使用案例类名称成功运行代码,当我将案例类分配给一个变量并将其传递给 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]

任何建议都有帮助!

【问题讨论】:

  • 传递类而不是对象..

标签: scala apache-spark types


【解决方案1】:

类型同义词(=别名)应该用关键字type引入

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

在 Scala 中,值和类型构成不同的命名空间。

Scala 2 中不允许使用 type(和 val)的顶级定义,因此它们必须位于某个对象内

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-09-28
    • 2018-02-02
    • 1970-01-01
    • 2013-06-23
    • 1970-01-01
    • 2013-01-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多