大数据学习之Spark——03Spark代码初体验(Word Count)

一. Spark代码流程

  1. 创建SparkConf对象
    可以设置Application name。
    可以设置运行模式及资源需求。
  2. 创建SparkContext对象
  3. 基于Spark的上下文创建一个RDD,对RDD进行处理。
  4. 应用程序中要有Action类算子来触发Transformation类算子执行。
  5. 关闭Spark上下文对象SparkContext。
1. Scala代码
  1. 代码1
    package com.hjf.core
    
    import org.apache.spark.rdd.RDD
    import org.apache.spark.{SparkConf, SparkContext}
    object WordCount {
      def main(args: Array[String]): Unit = {
      	// 创建SparkConf对象
        val conf: SparkConf = new SparkConf()
        conf.setMaster("local").setAppName("word count")
        // 创建SparkContext对象
        val sc: SparkContext = new SparkContext(conf)
        // 指定日志等级
        sc.setLogLevel("Error")
        // 按行读取文件中的内容
        val line: RDD[String] = sc.textFile("./data/words.txt")
        // 按空格切割
        val word: RDD[String] = line.flatMap(_.split(" "))
        // 将单词转成(单词, 1)的格式
        val map: RDD[(String, Int)] = word.map(one => new Tuple2(one, 1))
        // 按key进行分组累加
        val result: RDD[(String, Int)] = map.reduceByKey((v1, v2) => v1 + v2)
        // 打印
        result.foreach(println(_))
    	
    	// 简化版本: 
        // sc.textFile("./data/words.txt").flatMap(_.split(" ")).map((_, 1)).reduceByKey(_ + _).foreach(println(_))
        
        // 关闭
        sc.stop()
      }
    }
    
  2. 简化版本:
    package com.hjf.core
    
    import org.apache.spark.rdd.RDD
    import org.apache.spark.{SparkConf, SparkContext}
    object WordCount {
      def main(args: Array[String]): Unit = {
        val conf: SparkConf = new SparkConf()
        conf.setMaster("local").setAppName("word count")
        val sc: SparkContext = new SparkContext(conf)
        // 指定日志等级
        sc.setLogLevel("Error")	
        sc.textFile("./data/words.txt").flatMap(_.split(" "))
        	.map((_, 1)).reduceByKey(_ + _).foreach(println(_))
        
        // 关闭
        sc.stop()
      }
    }
    
2. Java代码
  1. Java7代码

    package java7;
    
    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 org.apache.spark.api.java.function.VoidFunction;
    import scala.Tuple2;
    
    import java.util.Arrays;
    import java.util.Iterator;
    
    public class WordCount {
        public static void main(String[] args) {
            SparkConf conf = new SparkConf();
            conf.setAppName("word count").setMaster("local");
    
            JavaSparkContext sc = new JavaSparkContext(conf);
            sc.setLogLevel("Error");
    
            JavaRDD<String> lines = sc.textFile("./data/words.txt");
            JavaRDD<String> words = lines.flatMap(new FlatMapFunction<String, String>() {
                @Override
                public Iterator<String> call(String s) throws Exception {
                    String[] one = s.split(" ");
                    return Arrays.asList(one).iterator();
                }
            });
    
            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> result = pairRDD.reduceByKey(new Function2<Integer, Integer, Integer>() {
                @Override
                public Integer call(Integer v1, Integer v2) throws Exception {
                    return v1 + v2;
                }
            });
    
            result.foreach(new VoidFunction<Tuple2<String, Integer>>() {
                @Override
                public void call(Tuple2<String, Integer> ele) throws Exception {
                    System.out.println(ele);
                }
            });
    
            sc.stop();
        }
    }
    
    
  2. java8代码

    package java8;
    
    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 scala.Tuple2;
    
    import java.util.Arrays;
    
    /**
     * @author Jiang锋时刻
     * @create 2020-07-21 22:57
     */
    public class WordCount {
        public static void main(String[] args) {
            SparkConf conf = new SparkConf();
            conf.setMaster("local").setAppName("word count");
            JavaSparkContext sc = new JavaSparkContext(conf);
            sc.setLogLevel("Error");
            JavaRDD<String> lines = sc.textFile("./data/words.txt");
            JavaRDD<String> words = lines.flatMap(one -> Arrays.asList(one.split(" ")).iterator());
            JavaPairRDD<String, Integer> pairRDD = words.mapToPair(one -> new Tuple2<>(one, 1));
            JavaPairRDD<String, Integer> result = pairRDD.reduceByKey((v1, v2) -> v1 + v2);
            result.foreach(one -> System.out.println(one));
            sc.stop();
        }
    }
    
    
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: Spark是一个开源的大数据处理框架,它可以在分布式计算集群上进行高效的数据处理和分析。Spark的特点是速度快、易用性高、支持多种编程语言和数据源。Spark的核心是基于内存的计算模型,可以在内存中快速地处理大规模数据。Spark支持多种数据处理方式,包括批处理、流处理、机器学习和图计算等。Spark的生态系统非常丰富,包括Spark SQL、Spark Streaming、MLlib、GraphX等组件,可以满足不同场景下的数据处理需求。 ### 回答2: Spark是一个分布式计算框架,其出现是为了解决Hadoop MapReduce计算模型中的许多性能问题。与MapReduce相比,Spark的计算速度更快,因为它可以在内存中缓存数据并使用更高效的调度算法。此外,Spark还支持多种语言,包括Scala、Java、Python和R等。 Spark有多个模块,包括Spark Core、Spark SQL、Spark Streaming、Spark MLlib和Spark GraphX等。Spark Core是Spark的基本组件,在其中实现了RDD这种抽象数据结构,它可以将数据分布在多台计算机上,从而实现分布式计算。Spark SQL提供了用于处理结构化数据的API和查询语言,它允许将Spark与现有的SQL工具和数据源一起使用。Spark Streaming可以在实时流处理中使用Spark来处理数据,并提供了与常见的消息队列和流处理系统的无缝集成。Spark MLlib提供了许多机器学习算法,可以在分布式环境中进行大规模的机器学习Spark GraphX是用于图计算的组件,可以用于处理较大的网络图和社交网络图等。 Spark可以在各种场景下使用,例如大型金融数据分析、人工智能、机器学习和图计算等领域。与Hadoop相比,Spark具有更快的速度、更轻量的资源消耗和更广泛的开源社区支持,已经成为许多大规模数据分析和处理项目的首选技术之一。 总之,Spark是一个功能强大的分布式计算框架,具有快速、灵活和多语言支持等特点,并且在实际应用中表现出色,是大数据学习中不可或缺的重要技术之一。 ### 回答3: Spark是一个快速、通用、分布式计算引擎,可以在大规模数据集上进行高效的数据处理。Spark是基于内存的计算引擎,可以将数据存储在内存中,从而提高计算速度。Spark支持多种编程语言,包括Java、Scala、Python和R,因此很容易上手,并且可以适应各种应用场景。 Spark的核心组件包括Spark SQL、Spark Streaming、Spark MLlib和Spark GraphX等,在处理不同类型的数据上都具有很强的适应性。Spark SQL可以处理结构化数据,Spark Streaming可以实现实时数据处理,Spark MLlib可以进行机器学习任务,Spark GraphX可以处理图形数据。此外,Spark还提供了一个交互式的shell,方便用户测试和调试代码。 在分布式环境下,Spark使用集群模式进行计算。集群中的每个节点都有自己的内存和CPU资源,Spark通过将任务分发到不同的节点上进行并行计算以提高计算速度。Spark还提供了一些高级特性,如广播变量、累加器和检查点等,以提高计算性能和可靠性。 在大数据处理方面,Spark有着广泛的应用场景。例如,Spark可以用于数据清洗和转换、数据仓库构建、实时数据处理和机器学习等任务。Spark还支持多种数据源,包括关系型数据库、Hadoop HDFS、NoSQL数据库和云存储等,这些数据源都可以与Spark集成,以进行数据分析和处理。 总之,Spark是一个非常重要和流行的大数据处理工具,它有强大的功能和广泛的应用场景。对于想要学习大数据处理的人来说,掌握Spark是必不可少的。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值