【问题标题】:scala import library wildcardscala导入库通配符
【发布时间】:2018-08-13 16:44:28
【问题描述】:

我是 scala 的新手。请温柔一点。

下面的导入会导入 ml 下的所有内容(每个类、特征和对象)。

import org.apache.spark.ml._

但不是在

下的 ParamMap
import org.apache.spark.ml.param._

换句话说,对于下面的代码,如果我这样做:

import org.apache.spark.ml.param._
import org.apache.spark.ml._

class Kmeans extends Transformer {
 def copy(extra: ParamMap): Unit = {
   defaultCopy(extra)
}}

然后我没有导入错误,但是如果我评论import org.apache.spark.ml.param._

//import org.apache.spark.ml.param._
import org.apache.spark.ml._

class Kmeans extends Transformer {
 def copy(extra: ParamMap): Unit = {
   defaultCopy(extra)
}}

它在 ParamMap 上给出了一个导入错误。

问题

为什么不包含import org.apache.spark.ml.param.ParamMap import org.apache.spark.ml.param._

【问题讨论】:

  • 注意可以import org.apache.spark.ml._, param._

标签: scala import wildcard


【解决方案1】:

Scala 导入不是递归的 - import org.apache.spark.ml._ 表示直接 导入 ml 包下的所有类和字段,但不导入其子包下的类和字段。

由于ParamMap 位于ml 的子包之一(ml.param) 下,您必须直接导入该包或ParamMap 类。

【讨论】:

  • 或者直接写def copy(extra: param.ParamMap)