[Spark Core] Spark 在 IDEA 下编程


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);
        }
        
    }
}

且将新火试新茶,诗酒趁年华。
原文地址:https://www.cnblogs.com/share23/p/9757802.html