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

    且将新火试新茶,诗酒趁年华。
  • 相关阅读:
    阿里轻量应用服务器 Tomcat 注意的地方 Unsupported major.minor version 52.0(unable to load class
    微信小程序-进度条循环播放
    微信小程序-动画
    微信小程序-自定义分享
    微信小程序-引导页
    微信小程序-时间轴
    微信小程序-两次点击不同图片交换图片位置
    Kafka消费者——消费者客户端多线程实现
    Kakfa消费者——原理及分析
    Kafka基础——Kafka架构
  • 原文地址:https://www.cnblogs.com/share23/p/9757802.html
Copyright © 2020-2023  润新知