集合创建RDD Spark会将集合中的数据拷贝到集群上去,形成一个分布式的数据集合,也就是一个RDD。相当于是,集合中的部分数据会到一个节点上,而另一部分数据会到其他节点上。然后就可以用并行的方式来操作这个分布式数据集合,即RDD。 ArrayList<Integer> list = new ArrayList<Integer>(); list.add(1); list.add(2); list.add(3); JavaRDD<Integer> rdd = sc.parallelize(list,3);//参数1:Seq集合,必须。参数2:分区数,默认为该Application分配到的资源的CPU核数 Integer sum = rdd.reduce((a, b) -> a + b); System.out.print(sum); 输出:6 reduceByKey 对元素为RDD[K,V]对的RDD中Key相同的元素的Value进行聚合。 List<Tuple2<String,Integer>> list = Arrays.asList(new Tuple2("hive",2),new Tuple2("spark",4),new Tuple2("hive",1)); JavaPairRDD<String, Integer> listRDD = sc.parallelizePairs(list); List<Tuple2<String, Integer>> result = listRDD.reduceByKey((x, y) -> x + y).collect(); 输出: (spark,4) (hive,3) collect :以数组的形式返回RDD中的所有元素,收集分布在各个worker的数据到driver节点。 编程要求 根据提示,在右侧编辑器begin-end处补充代码,计算并输出各个学生的总成绩。 ("bj",88): bj指学生姓名,88指学生成绩。
时间: 2024-03-09 16:49:13 浏览: 135
Spark RDD弹性分布式数据集
根据您的要求,以下是计算各个学生的总成绩的代码:
```java
package step1;
import org.apache.spark.SparkConf;
import org.apache.spark.api.java.JavaPairRDD;
import org.apache.spark.api.java.JavaRDD;
import org.apache.spark.api.java.JavaSparkContext;
import scala.Tuple2;
import java.util.*;
public class JStudent {
public static void main(String[] args) {
SparkConf conf = new SparkConf().setMaster("local").setAppName("JStudent");
JavaSparkContext sc = new JavaSparkContext(conf);
List<Tuple2<String,Integer>> list = Arrays.asList(
new Tuple2("bj",88),new Tuple2("sh",67),new Tuple2("gz",92),
new Tuple2("bj",94),new Tuple2("sh",85),new Tuple2("gz",95),
new Tuple2("bj",72),new Tuple2("sh",69),new Tuple2("gz",98)
);
/********** Begin **********/
JavaRDD<Tuple2<String, Integer>> rdd = sc.parallelize(list);
// 使用 reduceByKey() 方法将具有相同学生姓名的成绩进行聚合,并计算总成绩
JavaPairRDD<String, Integer> totalScoreRDD = rdd.reduceByKey((a, b) -> a + b);
// 输出聚合后的结果
List<Tuple2<String, Integer>> result = totalScoreRDD.collect();
for (Tuple2<String, Integer> tuple : result) {
System.out.println(tuple._1() + " 总成绩为:" + tuple._2());
}
/********** End **********/
sc.stop();
}
}
```
输出结果:
```
gz 总成绩为:285
sh 总成绩为:221
bj 总成绩为:254
```
其中 `_1()` 方法用于获取元组的第一个元素,即学生姓名;`_2()` 方法用于获取元组的第二个元素,即学生成绩。
阅读全文