1

私はspark 2.0.0を使用しています。spark ドライバーからエグゼキューターにパラメーターを渡す方法はありますか? 以下を試しました。

class SparkDriver {
     public static void main(String argv[]){
           SparkConf conf = new SparkConf().setAppName("test").setMaster("yarn");
           SparkSession sparkSession = SparkSession.builder().config(conf).getOrCreate(); 
           Dataset<Row> input = sparkSession.read().load("inputfilepath");
           Dataset<Row> modifiedinput = input.mapPartitions(new customMapPartition(5),Encoders.bean(Row.class));
     }

  class customMapPartition implements MapPartitionsFunction{
          private static final long serialVersionUID = -6513655566985939627L;
          private static Integer variableThatHastobePassed = null;

        public customMapPartition(Integer passedInteger){
             customMapPartition.variableThatHastobePassed= passedInteger;
         }
         @Override
          public Iterator<Row> call(Iterator<Row> input) throws Exception {
              System.out.println("number that is passed " + variableThatHastobePassed);
          }
   }

上記のように、パラメーターを渡すカスタム mappartitionfunction を作成しました。partitionfunction の call メソッドで static 変数にアクセスしています。これは、"setmaster("local") を使用してローカルで実行したときに機能しました。しかし、.setmaster("yarn") を使用してクラスターで実行した場合は機能しませんでした。(system.out.println ステートメントで null が出力されます)

ドライバーからエグゼキューターにパラメーターを渡す方法はありますか。

4

1 に答える 1