Spark 学习笔记之—WordCount 笔记。
1.简单的解释:
1.SparkConf :
SparkConf conf = new SparkConf();
conf.setMaster("local[5]");
conf.setAppName("WordConuts");
1.可以设置spark 的运行模式
1.1 local --在eclipse ,IDEA中开发spark程序要用local模式,本地模式,多用于测试
1.2 stanalone -- Spark 自带的资源调度框架,支持分布式搭建,Spark任务可以依赖standalone调度资源
1.3.yarn -- hadoop 生态圈中资源调度框架。Spark 也可以基于yarn 调度资源
1.4 mesos -- 资源调度框架
2.可以设置spark在webui 中显示的的application 的名称
3.可以设置当前spark application 运行内存(内存 + core)`
2.JavaSparkContext
--JavaSparkContext 是通往集群的唯一通道
JavaSparkContext sc = new JavaSparkContext(conf);
3.代码如下:
package com.wudl.spark.core;
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 org.apache.spark.api.java.function.FlatMapFunction;
import org.apache.spark.api.java.function.Function2;
import org.apache.spark.api.java.function.PairFunction;
import org.apache.spark.api.java.function.VoidFunction;
import scala.Tuple2;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Iterator;
import java.util.List;
public class WordConuts {
public static void main(String[] args) {
/**
* conf :
* 1.可以设置spark 的运行模式
* 1.1 local --在eclipse ,IDEA中开发spark程序要用local模式,本地模式,多用于测试
* 1.2 stanalone -- Spark 自带的资源调度框架,支持分布式搭建,Spark任务可以依赖standalone调度资源
* 1.3.yarn -- hadoop 生态圈中资源调度框架。Spark 也可以基于yarn 调度资源
* 1.4 mesos -- 资源调度框架
* 2.可以设置spark在webui 中显示的的application 的名称
* 3.可以设置当前spark application 运行内存(内存 + core)
*/
SparkConf conf = new SparkConf();
conf.setMaster("local[1]");
conf.setAppName("WordConuts");
/*
* sparkContext 是通往集群的唯一通道
* */
JavaSparkContext sc = new JavaSparkContext(conf);
/**
* spark 读取文件
*/
final JavaRDD<String> lines = sc.textFile("I:\\ideaWorkSpace\\com-wudl-spark\\ReadMe.txt");
/**
* flatMap 进一条数据出多条数据,一对多关系
*/
JavaRDD<String> words = lines.flatMap(new FlatMapFunction<String, String>() {
public Iterator<String> call(String s) throws Exception {
List<String> list = new ArrayList<String>();
String[] arr = s.split(" ");
for(String ss :arr){
list.add(ss);
}
return list.iterator();
}
});
/**
* * 在java中 如果想让某个RDD转换成K,V格式 使用xxxToPair
* * K,V格式的RDD:JavaPairRDD<String, Integer
*/
JavaPairRDD<String, Integer> pariWords = words.mapToPair(new PairFunction<String, String, Integer>() {
public Tuple2<String, Integer> call(String word) throws Exception {
return new Tuple2<String, Integer>(word, 1);
}
});
/**
* reduceByKey
* * 1.先将相同的key分组
* * 2.对每一组的key对应的value去按照你的逻辑去处理
*/
JavaPairRDD<String, Integer> result = pariWords.reduceByKey(new Function2<Integer, Integer, Integer>() {
public Integer call(Integer v1, Integer v2) throws Exception {
return v1 + v2;
}
});
result.foreach(new VoidFunction<Tuple2<String, Integer>>() {
public void call(Tuple2<String, Integer> stringIntegerTuple2) throws Exception {
System.out.println("tuples---"+stringIntegerTuple2);
}
});
sc.close();
}
}