2017-02-01 4 views
0

私はspark graphxを使用しようとしています。その前に、データフレームを使って頂点とエッジrddを配置したいと思っていました。その目的のために私はJavaRddマップfunction.butを使用しています。私はこの問題を解決するためにさまざまな方法を試しました.iは全体のclass.butをserializeしました。しかし、それは働かなかった。また、インドは地図の機能でそれを使用しました。しかし、それも動作しませんでした。org.apache.spark.SparkException:Javaでシリアル化できないタスク

//add long unique id for vertex dataframe and get javaRdd 
    JavaRDD<Row> ff = vertex_dataframe.javaRDD().zipWithIndex().map(new Function<Tuple2<Row, java.lang.Long>, Row>() { 
     public Row call(Tuple2<Row, java.lang.Long> rowLongTuple2) throws Exception { 
      return RowFactory.create(rowLongTuple2._1().getString(0), rowLongTuple2._2()); 
     } 
    }); 

iは、以下のようにシリアル化されたFunction()クラスです。

public abstract class SerialiFunJRdd<T1,R> implements Function<T1, R> , java.io.Serializable{ 

}

+0

コードを正しくフォーマットしてください。 –

答えて

0

私はJavaで非静的な内部クラスをシリアル化について何かを読むことをお勧めします。この静的な内部クラスをマップ内に作成しています。このクラスは、その直列化可能性をマークしても直列化できません。まず静的にする必要があります。

JavaRDD<Row> ff = vertex_dataframe.javaRDD().zipWithIndex().map(mapFunc); 

    static SerialiFunJRdd<Tuple2<Row, java.lang.Long>, Row> mapFunc=new SerialiFunJRdd<Tuple2<Row, java.lang.Long>, Row>() { 
     @Override 
     public Row call(Tuple2<Row, java.lang.Long> rowLongTuple2) throws Exception { 
      return RowFactory.create(rowLongTuple2._1().getString(0), rowLongTuple2._2()); 
     } 
    } 
+0

クイックレスポンスのおかげで。 –

関連する問題