2015-09-17 21 views
5

Spark konusunda çok yeniyim ve işçi düğümüne iletilmesi gereken bir yay bağlama içeriğim (ClassPathXmlApplicationContext kullanarak uygulama içeriğine xml yükleniyor). Kıvılcım bağlamını oluşturabiliyorum ve aynısını benim flatMap'ım ve onun null'ında kullanabiliyorum. Yine de bunu Flatmap işlevine aktarabilir miyim? Bu bahar içeriğine ihtiyaç duyan kıvılcımla başka bir çerçeve arıyorum. İşte Bahar içeriği Spark kıvılcım çalışanı düğümüne nasıl iletilir

Ben FlatMapFunction yılında null bağlamını kullanmaya çalışıyorum bazı kod

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(); 

olduğunu. Bu yöntemin dışında, bağlamın değeri vardır. herhangi bir yardım takdir edilecektir.

+0

İstisnai durumlar? İçeriği flatMap içinde oluşturmayı deneyebilir misiniz? – Reactormonk

+0

Bahsettiğim gibi, içeriği bir kereden fazla oluşturamıyorum. FlatMap'ın dışında olmalı. İşlevsellik içerisindeki bağlamı oluşturmaya çalıştım ve bazı bağlam nesnelerinin zaten var olduğunu söyleyen hatalar yaptım vb. Düzmap işlevi dışında bağlamı oluşturabilmem ve işlevle aynı şekilde erişebilmemin bir yolu var mı? –

+0

Nesnenin flatMap'in dışında null olmadığından emin misiniz? İçerde boşsa, belki de serileştirme mantığı doğru bir şekilde getirmedi. Ya da bir şekilde geçici olarak işaretlenir. – Reactormonk

cevap

3

Değişken bir geçiş yaptığınızda, işçilerde serileştirilmiyor ve kullanılamıyor. Bu, flatMap içindeki boşluğu açıklar. Serializer'ın sınıfa geçtiğinden emin olmalısınız (ve geçici olanı kaldırın). Sınıfı Serializable olmasa bile serileştirmek için kryo'yu kullanabilirsiniz.

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

vardır birkaç seçenek:

+0

Çok teşekkür ederim. yardımcı oldu –

İlgili konular