apache SparkでJava + Scalaを使用する。 私はヘルパークラスを使用してスカラグラフに変換javaRDDsの一部の文字列データ(textdata
変数)を有する:nullを取得する収集後にスパークマップ操作のグラフフィールド
SparkConf = new SparkConf(true); // also set parameters, etc
JavaSparkContext sc = new JavaSparkContext(conf);
JavaRDD<Graph<String, Object>> graphs = textdata.map(new GraphConverterClass(JavaSparkContext.toSparkContext(sc)));
List<Graph<String,Object>> graphsList = graphs.collect();
コンバータクラスは、機能インタフェースを実装し、それが呼び出しがあります
public Graph<String, Object> call(String data)
{
Graph<String,object> mygraph = someFunc(data,sc);
return mygraph;
}
を
これを実行すると、コンバータークラスの中で私はmygraph
の結果を見ることができます。
しかし、ドライバプログラムで収集するリストでは、グラフの数が正しくても、それぞれの頂点と辺のフィールドはnullです。
上記のシナリオでGraphの代わりに別のダミークラスを使用すると、そのフィールドの値が保持されます。
なぜグラフオブジェクトが正しく収集されないのですか?
私は、コンバータクラスの中で 'private static transient SparkContext sc;'としてsparkコンテキストを宣言し、それをドライバから引数として渡しました。一時的なものがシリアル化されていなければ、それでも問題はありますか? – npit
さらに、コンバータクラスのメソッドでは、sparkコンテキストがnullではありません。そこのグラフはいいです、私はちょうどそれを運転手にそのまま渡すことができません。 – npit