2016-07-22 7 views
1

リソースファイルパスの場所をドライバからエグゼキュータに渡す必要があります。 これを達成するために、私はexecutor enviornmnet変数を設定しようとしています。Spark:エグゼキュータを起動するリソースファイルパスを送信する

class AppMain{ 
def main(args : Array[String]){ 
    val resourcePath = "https://stackoverflow.com/a/" 
    sparkConf.setExecutorEnv("RESOURCEPATH", resourcePath) 
} 
class B{ 
println(System.getenv("RESOURCEPATH")) // This returns null 
} 
} 

任意の提案、これを解決する方法についてまたは私はここで何をしないのです: コードがfollwsように見えますか?

答えて

0

sparkでは、呼び出されたアクションのクロージャ内で任意の変数を直接使用できます。

String my_path="path"; 
rdd.map(new Function<Tuple2<ImmutableBytesWritable,Result>, String>() { 
     @Override 
     public String call(Tuple2<ImmutableBytesWritable, Result> immutableBytesWritableResultTuple2) throws Exception { 
      return my_path; 
     } 
    }); 

提案:あなたはその後、ローカルでテストしている場合は、エグゼキュータ・プロセスが作成されたかどうかを確認または実行者はドライバーと同じJVM内runnedされている場合。環境変数は、エグゼキュータが起動しているときにのみ設定されるためです。

+0

ありがとうございます。しかし、私のアプリケーションには多くのクラスとオブジェクトがあります。オブジェクトをインスタンス化している間、私は環境変数が必要でした。 このアプローチでどのように達成できるのか分かりません。私はクラスタでテストしています。エグゼキュータログにenv値がnullとして表示されます – Alok

関連する問題