前言:
java 代码编写spark 的wordCount 使用的方法和scala 基本相同
除了生成(单词,1)时候使用的是mapToPair() 方法,代替了map()
因为在java中生成kv类型RDD 需要使用xxToPair 方法
而且java 中没有sortBy 中有soarBykey
public class SparkWc {
public static void main(String[] args) {
//设置运行模式 运行模式总共有四种 local standalone yarn mesos
//webUi显示 application 名称
//设置集群计算资源
SparkConf conf = new SparkConf().setAppName("JavaWc").setMaster("local").set("spark.executor.memory", "1g");
//远程链接hadoop
Properties properties = System.getProperties();
properties.setProperty("HADOOP_USER_NAME", "root");
//spark 的一个core 只能跑一个线程***
// 四核八线程可以给spark提供8个核
//SparkContext sc = new SparkContext(conf); java 使用的是javaSparkContext scala 使用的是SparkContext
JavaSparkContext sc = new JavaSparkContext(conf);
//Rdd理解为数据集理解为一个数组
// textFile读取方式就是一行作为一个元素
JavaRDD<String> lines = sc.textFile("hdfs://hadoop-101:9000/a.txt");
//一行出来n个单词 一对多UDTF 类似explode() lateral view()
JavaRDD<String> words = lines.flatMap(new FlatMapFunction<String, String>() {
@Override
public Iterator<String> call(String s) throws Exception {
return Arrays.asList(s.split(" ")).iterator();
}
});
//在java中返回元祖类型Rdd要使用XXToPair这类型方法
JavaPairRDD<String, Integer> pairRDD = words.mapToPair(new PairFunction<String, String, Integer>() {
@Override
public Tuple2<String, Integer> call(String s) throws Exception {
return new Tuple2<String, Integer>(s, 1);
}
});
JavaPairRDD<String, Integer> reduced = pairRDD.reduceByKey(new Function2<Integer, Integer, Integer>() {
@Override
public Integer call(Integer v1, Integer v2) throws Exception {
return v1 + v2;
}
});
reduced.foreach(new VoidFunction<Tuple2<String, Integer>>() {
@Override
public void call(Tuple2<String, Integer> t2) throws Exception {
println(t2);
}
});
}
}