gpt4 book ai didi

java - 以最佳方式计算 JavaRDD 的统计信息

转载 作者:行者123 更新时间:2023-12-01 20:03:06 24 4
gpt4 key购买 nike

我需要对一个巨大的 RDD 进行复杂的计算,但为了简单起见,我将问题简化为更简单的问题:

我有一个像这样获得的JavaRDD:

 JavaRDD<Student> students = sc.parallelize(
javaFunctions(sc).cassandraTable("test", "school", mapRowTo(Student.class)).collect());

Student 类如下所示:

public class Student implements Serializable{
Integer id;
Integer classroom;
String name;
Integer mark1;
Integer mark2;
// ... getters and setters

现在,我希望在一次迭代中为每个教室使用(如果可能的话)StatCounter 提供 mark1 和 mark2 列的 stddedv、avg。我知道如何使用 StatCounter,但是超过了

JavaRDD<Numeric> 

就我而言,我有

JavaRDD<Student>

有什么想法吗?

谢谢

最佳答案

首先,永远不要:

sc.parallelize(someRDD.collect());

这绝对不是一个好主意。像以前一样。

现在:

one iteration to have the stddedv, avg for mark1 and mark2 columns for every classrooms using if it's possible StatCounter

这是可能的,但只需使用 DataFrameCassandra connector :

import static org.apache.spark.sql.functions.*;

spark
.read
.format("org.apache.spark.sql.cassandra")
.options(Map( "table" -> "school", "keyspace" -> "test"))
.load()
.groupBy("classroom"))
.agg(mean("mark1"), stddev("mark1"), mean("mark2"), stddev("mark2"));

使用统计计数器,您可以转换 JavaPairRDD<Integer,Tuple2<Integer,Integer>> ( (class, (mark1, , mark2)) ) 和 combineByKeyTuple2StatCounters 。您还可以替换 Tuple2mllib.Vector并与 MultivariateStatisticalSummary 聚合

关于java - 以最佳方式计算 JavaRDD 的统计信息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47798152/

24 4 0