Scala多个导入无法编译

时间:2016-09-12 14:16:30

标签: scala apache-spark

我是Scala的新手。我在代码中创建了一个包对象:

package mypackage.spark

import scala.language.implicitConversions
import org.apache.spark.SparkContext
import mypackage.spark.SparkContextFunctions

package object spark {
  implicit def toSparkContextFunctions(sc: SparkContext): SparkContextFunctions =
new SparkContextFunctions(sc)
}

我希望当我使用 import mypackage.spark ._ 时,我将能够使用 SparkContextFunctions 类中的方法。当我只使用一个导入的包对象时,这种方法适用于我。但是当我在我的代码中添加额外的导入时。例如:

import mypackage.spark._
import com.datastax.spark.connector._

com.datastax.spark.connector ._ org.apache.spark.SparkContext 类做同样的事情。我的代码停止编译,我有一个错误,使用的方法不是 SparkContext 类的成员。当我更改导入顺序时,编译器启动时会看到 mypackage.spark ._ 中的方法,并停止查看 com.datastax.spark.connector中的方法。

也许我错过了什么?或者Scala不支持这个?

感谢。

2 个答案:

答案 0 :(得分:0)

如果您需要同时使用两个名为SparkContext的类,您可以为它们添加别名:

import my.package.name.{SparkContext => MySparkContext}
import some.other.package.name.{SparkContext => OtherSparkContext}

来自同一个软件包的类,您可以在同一个import中使用别名:

import my.package.name.{SparkContext => MySparkContext, SomethingElse => MySomethingElse}

您可能希望选择比MyXXXOtherXXX更好的名称。

答案 1 :(得分:0)

导入可能以两种方式发生冲突:要么使用toSparkContextFunctions作为隐式转换名称,要么两者都提供具有相同名称的扩展方法(即使是不同的签名)。

如果情况不是这样,应该没有问题。如果是,请更改您的方法名称,因为您无法更改com.datastax.spark.connector中的名称。