如何将Spring上下文传递给Spark工作节点

Ram*_*mar 5 apache-spark

我是Spark的新手,我有弹簧上下文(使用ClassPathXmlApplicationContext将xml加载到应用程序上下文中),需要传递给worker节点.我能够创建Spark上下文并尝试在我的flatMap和null中使用它.无论如何我可以将它传递给Flatmap函数吗?我正在调用另一个需要这个Spring环境的spark中的框架.

这是一些代码

ApplicationContext context = new ClassPathXmlApplicationContext("spring/rules-engine-spring.xml");

JavaRDD<Row> partitions = r.mapPartitions(
  new FlatMapFunction<Iterator<Row>, Row>() {
      public Iterable<Row> call(Iterator<Row> rowIterator) throws Exception {

          List<Data> factList = new ArrayList<Data>();
          while (rowIterator.hasNext()) {
              Row rw = rowIterator.next();
              Data fact = new Data();
              fact.setGrain(rw.getString(0));
              fact.setRoute(rw.getString(1));
              factList.add(fact);
          }
          Iterable itr = new Iterable() {
                  List l = new ArrayList<Integer>();

                  public Iterator iterator() {
                      return l.iterator();
                  }
              };
          return itr;
      }

  });
List result=partitions.collect();
Run Code Online (Sandbox Code Playgroud)

当我试图在FlatMapFunction中使用上下文时,它为null.在这种方法之外,上下文具有价值.任何帮助,将不胜感激.

Rea*_*onk 3

当您将变量设置为瞬态时,它不会被序列化并且对工作人员不可用。这可以解释 flatMap 中的 null 。您必须确保序列化器选择该类(并删除瞬态)。您也许可以使用 kryo 来序列化该类,即使它不是Serializable.

\n

通过http://apache-spark-user-list.1001560.n3.nabble.com/Un-serialized-3rd-party-classes-Spark-Java-td7815.html

\n
\n

有以下几种选择:

\n\n
\n