本教程演示的是:提交的任务为 WordCount 任务,即统计单词个数,需要提前在集群中准备需要统计的文件,可以是一个 HDFS 文件,或 Yarn 集群所有节点上都存在的本地文件。更多说明请查看示例工程 README.md。
// 初始化Spark上下文
SparkConf sparkConf = new SparkConf().setAppName("SparkWordCountJavaExample");
JavaSparkContext sc = new JavaSparkContext(sparkConf);
// 读取文件并进行WordCount计算
// 首先将文本按照空格进行分割,然后针对每个单词 word,将其转换为一个二元组(word, 1),最后按照单词 word 进行累加计算
JavaRDD<String> textFile = sc.textFile(args[0]);
JavaPairRDD<String, Integer> counts = textFile
.flatMap(s -> Arrays.asList(s.split(" ")).iterator())
.mapToPair(word -> new Tuple2<>(word, 1))
.reduceByKey(Integer::sum);
// 保存计算结果
if (args.length > 1 && args[1] != null && args[1].length() > 0) {
counts.saveAsTextFile(args[1]);
}
// 收集计算结果,打印日志并输出控制台
List<Tuple2<String, Integer>> output = counts.collect();
for (Tuple2<?, ?> tuple : output) {
System.out.println(tuple._1 + " " + tuple._2);
LOGGER.info(tuple._1 + " " + tuple._2);
}
// 关闭Spark上下文
sc.close();