2016-06-16 3 views
0

jarファイルにカスタムスパークを構築しています。そして、私はデフォルトのスパークビルドを使用してそれを使用したいと思います。Spark:変更されたスパークを構築するときのネームスペースの競合の回避

org.apache.spark.allOfSparkからorg.another.spark.allOfSparkにネームスペースを変更するにはどうすればよいですか?

モジュールをインポートする際の競合を避けるため、これを行う必要があります。前もって感謝します。

+0

sbtでシェードを使用してみてください。 – Knight71

答えて

1

ビルドツールによっては、Mavenのrelocation機能を使用して、ビルド時にカスタムスパークを新しいパッケージに移動することができます。 sbtや他のビルドツールにも同様の機能があります。

プロジェクトのビルドに使用しているものを指定した場合は、さらに問題の解決に役立てることができます。

- ここUPDATE

はあなたが始める助けるべきであるあなたのpom.xmlのためのサンプルコードです:

<project> 
    <!-- Your project definition here, with the groupId, artifactId, and it's dependencies --> 
    <build> 
    <plugins> 
     <plugin> 
     <groupId>org.apache.maven.plugins</groupId> 
     <artifactId>maven-shade-plugin</artifactId> 
     <version>2.4.3</version> 
     <executions> 
      <execution> 
      <phase>package</phase> 
      <goals> 
       <goal>shade</goal> 
      </goals> 
      <configuration> 
       <relocations> 
       <relocation> 
        <pattern>org.apache.spark</pattern> 
        <shadedPattern>shaded.org.apache.spark</shadedPattern> 
       </relocation> 
       </relocations> 
      </configuration> 
      </execution> 
     </executions> 
     </plugin> 
    </plugins> 
    </build> 

</project> 

これは効果的shaded.org.apache.sparkあなたと呼ばれる新しいパッケージにスパークのすべてを移動しますアプリケーションをパッケージ化します(Mavenにjarを生成するよう依頼したとき)。

特定のパッケージを除外する必要がある場合は、<exclude>タグをMavenの再配置のリンクに示すように使用できます。

あなたが達成しようとしているのは、単にSparkの一部をカスタマイズするだけの場合、Spark's codeをフォークしてMLLibの一部を直接書き直して、あなた専用にビルドしてくださいそれは便利です)。

Mavenからの依存関係として単純に取り込み、変更しているクラスを上書きするだけで、元のSparkパッケージのクラスではなく独自のクラスを使用する必要があります。

+0

私はほとんどの時間sbtを使用していますが、現在はmvnを使用してビルドしようとしています。どちらのビルドツールでも私の知識はごくわずかです。私はpom.xmlを変更する方法を知らないし、build.sbtを書いている私の唯一の経験は、sparkアプリケーションにいくつかの依存関係を書いているだけです。私が '移転 'のコードをどこに挿入できるかを教えてもらえれば、とても感謝しています。具体的には、私の修正はすべてspark-mllibの中にあります。 – jtitusj

+0

私が与えたリンクに基づいて、 'pom.xml'ファイルに追加する必要があるものを簡単に見つけることができます。私はスニペットを使って自分の答えを更新しましたが、それを行う方法についてのアイデアはありますが、使用しているパッケージの名前はありません。しかし、私は今あなたが達成しようとしていることについてはあまりよく分かりません。 MLLibの一部を書き直し、それ以外のSparkをそのまま保つことを望んでいるのですか、完全なカスタムSparkが必要ですか?私は後者のケースでカスタムSparkと元のプロジェクトを同じプロジェクトに残しておきたいのはなぜか分かりません。 –

+0

私は実際にMLLibの一部を書き換えています。私はMLLibをjarファイルにパッケージし、Jupyterの '%addJar'マジックを使ってspark-kernelの中​​で使用したいと思います。名前を変更したいのは、 'import org.another.spark.ml.something'を実行して' import org.apache.spark.ml.something'を実行するときに競合を避けたいということです。私は最終的にはコミュニティに貢献したいと思っていますが、今は自分の変更がより良いかどうかをテストしたいと思います。 – jtitusj

関連する問題