gpt4 book ai didi

java - Spark : Creating Object RDD from List RDD
转载 作者:行者123 更新时间:2023-12-01 09:53:12 25 4
gpt4 key购买 nike

假设Employee是一个 Java 类。

我有一个JavaRDD<Employee[]> arrayOfEmpList ,即每个 RDD 都有一个 array of employees .

除此之外,我想创建一个员工列表,例如

JavaRDD<Employee>

这是我尝试过的:创建了List<Employee> empList = new ArrayList<Employee>();

然后foreach Employee[]的RDD:

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,因此第一个员工列表可能包含 10 条记录,第二个员工列表可能包含 100 条记录,第三个员工列表可能包含 200 条记录。我想要一个包含 330 条记录的最终列表,然后我可以对其进行并行化并执行操作。

最佳答案

您需要的是数组上的 flatMap 转换。我首先将您的员工数组转换为列表:

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

检查一下,也许该方法有一个重载,它直接接受数组,而不仅仅是集合。

您可以在编程指南的转换部分中看到这一点:http://spark.apache.org/docs/latest/programming-guide.html#transformations

JavaDocs:http://spark.apache.org/docs/latest/api/java/org/apache/spark/api/java/JavaRDDLike.html#flatMap(org.apache.spark.api.java.function.FlatMapFunction)

关于java - Spark : Creating Object RDD from List<Object> RDD,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37462144/

25 4 0