2016-05-26 8 views
0

EmployeeはJavaクラスです。スパーク:リストからオブジェクトRDDを作成<Object> RDD

私はJavaRDD<Employee[]> arrayOfEmpListです。つまり、各RDDはarray of employeesです。

: は List<Employee> empList = new ArrayList<Employee>();

その後、foreachの従業員のRDD []を作成:

は、このうち、私はこれは私が試したものです、

JavaRDD<Employee> 

のようなものを、従業員の単一のリストを作成したいです

arrayOfEmpList.forEach(new VoidFunction<Employee[]>(){ 
public void call(Employee[] arg0){ 
    empList.addAll(Arrays.asList(arg0)); 
    System.out.println(empList.size()); //prints correct values incrementally 
} 
}); 

System.out.println(empList.size()); //gives 0 

foreachループ外のサイズを取得できません。

これを達成する別の方法はありますか?

P.S:すべての従業員レコードを別個のRDDにしたいので、第1の従業員リストは10個のレコードを含み、第2のレコードは100個のレコードを含み、第3番目のレコードは200個のレコードを含むことができる。私は330レコードの最終的なリストが欲しい。それを次に並列化してアクションを実行できる。

答えて

1

あなたの必要とするのは、配列上でflatMapの変換です。私は、最初のリストにあなたの従業員の配列を変換しています:

JavaRDD<Employee> employeeRDD = arrayOfEmployeeList.flatMap(empArray -> Arrays.asList(empArray)); 

チェックし、おそらく方法は、直接配列だけでなく、コレクションを受け取るオーバーロードがあります。

あなたはプログラミングガイドの変換部でこれを見ることができます:http://spark.apache.org/docs/latest/programming-guide.html#transformations

のJavaDoc:​​3210

+0

働いていました!リンクも見ていきます。 – gaurav5430

関連する問題