我是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不支持这个?
感谢。
答案 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}
您可能希望选择比MyXXX
和OtherXXX
更好的名称。
答案 1 :(得分:0)
导入可能以两种方式发生冲突:要么使用toSparkContextFunctions
作为隐式转换名称,要么两者都提供具有相同名称的扩展方法(即使是不同的签名)。
如果情况不是这样,应该没有问题。如果是,请更改您的方法名称,因为您无法更改com.datastax.spark.connector
中的名称。