2016-09-12 3 views
0

私はScalaで新しいです。私は私のコードでパッケージオブジェクトを作成: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) 
} 

私は輸入mypackage.spark._を使用する場合、私はSparkContextFunctionsクラスのメソッドを使用できることを期待しています。このアプローチは、インポートされたパッケージオブジェクトを1つしか使用しないときに機能します。しかし、私は自分のコードに追加のインポートを追加します。たとえば、次のようにorg.apache.spark.SparkContextクラスで同じことをやって

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

com.datastax.spark.connector._。コードがコンパイルされず、使用されたメソッドがSparkContextクラスのメンバーではないというエラーがあります。私は輸入品の順序を変更すると、コンパイラが開始さmypackage.spark._からメソッドを参照し、停止しcom.datastax.spark.connector._

からの方法は、たぶん私は何かを逃した?見ますかまたはScalaはこれをサポートしていませんか?

ありがとうございました。

答えて

0

あなたが同時にSparkContextという名前の2つのクラスを使用する必要がある場合は、あなたがそれらのエイリアスを作成することができます:あなたは同じimportにエイリアスすることができ、同じパッケージから

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

クラス:

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

MyXXXOtherXXXよりも良い名前を選ぶことをお勧めします。

+0

ありがとうございますが、これは私の質問の答えではありません。あなたの助言をありがとう、私はプロジェクトの私はより良い名前を使用して私は例のパッケージ名を削除しました。 –

+0

私は自分のコードを参照するのではなく、MyXXXとOtherXXXを使用した私の例を参考にしています。あなたの説明に基づいて、あなたが使用しているワイルドカードからの名前の衝突があると言います。そうでない場合は、問題を明確にするために質問を増やしたいかもしれません。 – midor

+0

私はこのアプローチを使用します:http://alvinalexander.com/scala/scala-how-to-add-new-methods-to-existing-classesと2つの異なるパッケージオブジェクトにメソッドを追加し、それらを同時に使用したい –

0

インポートは、暗黙の変換名にtoSparkContextFunctionsを使用するか、同じ名前の拡張メソッドを提供するか(異なる署名であっても)のどちらかで競合する可能性があります。

どちらの場合でも問題はありません。その場合は、com.datastax.spark.connectorの名前を変更することはできないので、メソッド名を変更してください。

+0

ありがとうございます。それは助けになった。 –

関連する問題