[英]How to Map with a case class in Scala
我正在尝试转换一个 Map 和我使用 Apply 定义的案例 class。
case class ETLConfig (srcTableName:Option[String] = None,
idCol:Option[String] = None ,
orderingCol:Option[String] = None)
object ETLConfig {
def apply(map: Map[String, String]): ETLConfig =
ETLConfig(map.get("srcTableName"),map.get("idCol"),map.get("orderCol"))
}
Error:
command-512604125416347:2: error: too many arguments for method apply: (map: Map[String,String])ETLConfig in object ETLConfig
def apply(map: Map[String, String]):ETLConfig = ETLConfig(map.get("srcTableName"),map.get("idCol"),map.get("orderCol"))
有人可以指出我在做什么错吗?
我也尝试了以下方法并且正在工作。
val empMap:Map[String, String] = Map("srcTableName" -> "Employee","idCol" -> "EmpId", "orderCol" -> "CreatedOn" )
val empConfig = ETLConfig(dtMap.get("srcTableName"),dtMap.get("idCol"), dtMap.get("orderCol"))
val srcTable = dtConfig.srcTableName.orNull
编辑:由于您使用的是 Databricks,因此您应该在package 单元格中定义您的类和对象。
原答案:
我假设您在 REPL 中执行此操作。 案例 class 及其配套案例 object 需要在同一个文件中。 在通常的 Scala REPL 中,每个命令都算作一个新的“文件”。 这意味着您的ETLConfig
object 不是您的案例 class 的伴侣,因此它会影响您的应用方法而不是重载它(因此您不能调用原始方法)。
在官方的 Scala REPL 中,可以使用:paste
命令解决这个问题:
scala> :paste
// Entering paste mode (ctrl-D to finish)
case class ETLConfig (srcTableName:Option[String] = None,
idCol:Option[String] = None ,
orderingCol:Option[String] = None)
object ETLConfig {
def apply(map: Map[String, String]): ETLConfig =
ETLConfig(map.get("srcTableName"),map.get("idCol"),map.get("orderCol"))
}
// Exiting paste mode, now interpreting.
defined class ETLConfig
defined object ETLConfig
从您的 output 看来,您使用的是不同的 REPL,所以我不知道这是否可行。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.