以最佳方式计算JavaRDD的统计信息
我需要在巨大的RDD上进行复杂的计算,但为了简单起见,我将问题简化为更简单的问题: 我得到了一个JavaRDD,如下所示:以最佳方式计算JavaRDD的统计信息,java,apache-spark,spark-cassandra-connector,Java,Apache Spark,Spark Cassandra Connector,我需要在巨大的RDD上进行复杂的计算,但为了简单起见,我将问题简化为更简单的问题: 我得到了一个JavaRDD,如下所示: JavaRDD<Student> students = sc.parallelize( javaFunctions(sc).cassandraTable("test", "school", mapRowTo(Student.class)).collect()); 现在,我希望在一次迭代中,如果可能的话,使用StatCoun
JavaRDD<Student> students = sc.parallelize(
javaFunctions(sc).cassandraTable("test", "school", mapRowTo(Student.class)).collect());
现在,我希望在一次迭代中,如果可能的话,使用StatCounter为每个教室设置stddedv、平均mark1和mark2列。
我知道如何使用StatCounter,但需要一段时间
JavaRDD<Numeric>
JavaRDD
就我而言,我有
JavaRDD<Student>
JavaRDD
有什么想法吗
谢谢首先,永远不要:
sc.parallelize(someRDD.collect());
这不可能是个好主意。一如既往
现在:
一次迭代,如果可能的话,使用StatCounter为每个教室设置stddedv、mark1和mark2列的平均值
这是可能的,但只需将DataFrame
用于:
使用stat counter,您可以将javapairdd
((class,(mark1,mark2))
)和与StatCounters的Tuple2
进行转换。您还可以使用mllib.Vector
替换Tuple2
,并使用MultivariateStatisticalSummary
进行聚合首先,决不:
sc.parallelize(someRDD.collect());
这不可能是个好主意。一如既往
现在:
一次迭代,如果可能的话,使用StatCounter为每个教室设置stddedv、mark1和mark2列的平均值
这是可能的,但只需将DataFrame
用于:
使用stat counter,您可以将javapairdd
((class,(mark1,mark2))
)和与StatCounters的Tuple2
进行转换。您还可以使用mllib.Vector
替换Tuple2
,并使用MultivariateStatisticalSummary
进行聚合。因此,如果您有3个节点(例如)使用Spark和Cassandra,使用Parralize读取,它将带来从JavaRDD中每个节点分割的数据。即使在他们的视频课程中,Datastax也只使用javaRDD而不使用DataFramesSo,如果您有3个节点(例如)使用Spark和Cassandra,使用parralelize读取,它将带来javaRDD中每个节点分离的数据。即使在视频课程中,Datastax也只使用javaRDD,而不使用数据帧
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"));