0. 说明
Spark 在 IDEA 下使用 Scala & Spark 在 IDEA 下使用 Java 编写 WordCount 程序
1. 准备
在项目中新建模块,为模块添加 Maven 和 Scala 支持
pom.xml 中添加的内容如下
<dependencies> <dependency> <groupId>org.apache.spark</groupId> <artifactId>spark-core_2.11</artifactId> <version>2.1.0</version> </dependency> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.12</version> </dependency> </dependencies>
2. 编程
2.1 IDEA 下使用 Scala 编写 WordCount 程序
import org.apache.spark.{SparkConf, SparkContext} /** * Scala 实现 MR */ object WordCountScala { def main(args: Array[String]): Unit = { // 创建 spark 配置对象 val conf = new SparkConf() conf.setAppName("WCScala") conf.setMaster("local") // 创建上下文 val sc = new SparkContext(conf) // 1. 加载文档 val rdd1 = sc.textFile("file:///e:/data.txt") // 2. 压扁 val rdd2 = rdd1.flatMap(_.split(" ")) // 3. 标1成对 val rdd3 = rdd2.map((_, 1)) // 4. 聚合 val rdd4 = rdd3.reduceByKey(_ + _) val arr = rdd4.collect() arr.foreach(println) // 5. 链式编程 sc.textFile("file:///e:/data.txt") .flatMap(_.split(" ")) .map((_, 1)) .reduceByKey(_ + _) .collect() .foreach(println) } }
2.2 IDEA 下使用 Java 编写 WordCount 程序
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 scala.Tuple2; import java.util.Arrays; import java.util.Iterator; import java.util.List; /** * Java 实现 MR */ public class WordCountJava { public static void main(String[] args) { // 创建 spark 配置对象 SparkConf conf = new SparkConf(); conf.setAppName("WCJava"); conf.setMaster("local"); // 创建上下文 JavaSparkContext sc = new JavaSparkContext(conf); // 1. 加载文件 JavaRDD<String> rdd1 = sc.textFile("file:///e:/data.txt"); // 2. 压扁 JavaRDD<String> rdd2 = rdd1.flatMap(new FlatMapFunction<String, String>() { public Iterator<String> call(String s) throws Exception { String[] arr = s.split(" "); return Arrays.asList(arr).iterator(); } }); // 3. 标1成对 JavaPairRDD<String, Integer> rdd3 = rdd2.mapToPair(new PairFunction<String, String, Integer>() { public Tuple2<String, Integer> call(String s) throws Exception { return new Tuple2<String, Integer>(s, 1); } }); // 4. 按 key 聚合 JavaPairRDD<String, Integer> rdd4 = rdd3.reduceByKey(new Function2<Integer, Integer, Integer>() { public Integer call(Integer v1, Integer v2) throws Exception { return v1 + v2; } }); // 5. 收集 List<Tuple2<String, Integer>> collect = rdd4.collect(); for (Tuple2<String, Integer> t : collect) { System.out.println(t); } } }