Scala编写Spark的WorkCount

1 创建一个Maven项目

2 在pom.xml中添加依赖和插件

<!-- 定义了一些常量 -->
    <properties>
        <maven.compiler.source>1.8</maven.compiler.source>
        <maven.compiler.target>1.8</maven.compiler.target>
        <scala.version>2.12.10</scala.version>
        <spark.version>3.0.1</spark.version>
        <encoding>UTF-8</encoding>
    </properties>

    <dependencies>

        <!-- 导入scala的依赖 -->
        <dependency>
            <groupId>org.scala-lang</groupId>
            <artifactId>scala-library</artifactId>
            <version>${scala.version}</version>
            <scope>provided</scope>
        </dependency>

        <dependency>
            <groupId>org.apache.spark</groupId>
            <artifactId>spark-core_2.12</artifactId>
            <version>${spark.version}</version>
            <scope>provided</scope>
        </dependency>

    </dependencies>

    <build>
        <pluginManagement>
            <plugins>
                <!-- 编译scala的插件 -->
                <plugin>
                    <groupId>net.alchim31.maven</groupId>
                    <artifactId>scala-maven-plugin</artifactId>
                    <version>3.2.2</version>
                </plugin>
                <!-- 编译java的插件 -->
                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-compiler-plugin</artifactId>
                    <version>3.5.1</version>
                </plugin>
            </plugins>
        </pluginManagement>
        <plugins>
            <plugin>
                <groupId>net.alchim31.maven</groupId>
                <artifactId>scala-maven-plugin</artifactId>
                <executions>
                    <execution>
                        <id>scala-compile-first</id>
                        <phase>process-resources</phase>
                        <goals>
                            <goal>add-source</goal>
                            <goal>compile</goal>
                        </goals>
                    </execution>
                    <execution>
                        <id>scala-test-compile</id>
                        <phase>process-test-resources</phase>
                        <goals>
                            <goal>testCompile</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>

            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <executions>
                    <execution>
                        <phase>compile</phase>
                        <goals>
                            <goal>compile</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>

            <!-- 打jar插件 -->
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-shade-plugin</artifactId>
                <version>2.4.3</version>
                <executions>
                    <execution>
                        <phase>package</phase>
                        <goals>
                            <goal>shade</goal>
                        </goals>
                        <configuration>
                            <filters>
                                <filter>
                                    <artifact>*:*</artifact>
                                    <excludes>
                                        <exclude>META-INF/*.SF</exclude>
                                        <exclude>META-INF/*.DSA</exclude>
                                        <exclude>META-INF/*.RSA</exclude>
                                    </excludes>
                                </filter>
                            </filters>
                        </configuration>
                    </execution>
                </executions>
            </plugin>
        </plugins>
    </build>

3创建一个scala目录

创建一个scala目录,选择scala目录,右键,将目录转成源码包,或者点击maven的刷新按钮

4编写Spark程序

package com.doit.day01

import org.apache.spark.{SparkConf, SparkContext}
import org.apache.spark.rdd.RDD

object WordCount {
  def main(args: Array[String]): Unit = {

   /* //本地运行模式,使用如下代码
    //设置Hadoop用户,否则会抛没有写权限异常
    System.setProperty("HADOOP_USER_NAME","root")

    //设置为本地模式.setMaster("local[*]")
    val conf = new SparkConf().setAppName("WordCount").setMaster("local[*]")*/


    val conf = new SparkConf().setAppName("WordCount")
    val sc = new SparkContext(conf)

    //使用SparkContext创建RDD 
    //args(0):读取文件路径
    val lines: RDD[String] = sc.textFile(args(0))

    /*Transformation 开始*/
    //切分压平
    val words: RDD[String] = lines.flatMap(_.split(","))

    //将单词和1组合
    val wordAndOne: RDD[(String, Int)] = words.map((_, 1))

    //根据相同的单词进行聚合运算
    val reduced: RDD[(String, Int)] = wordAndOne.reduceByKey(_ + _)

    //排序
    val sorted = reduced.sortBy(_._2, false)
    /*Transformation 结束*/

    调用Action将计算结果保存到HDFS中
    sorted.saveAsTextFile(args(1))

    //释放资源
    sc.stop()
  }

}

5 使用maven打包

6提交任务

上传jar包到服务器,然后使用sparksubmit命令提交任务

/opt/apps/spark-3.0.1-bin-hadoop3.2/bin/spark-submit   --class com.doit.day01.WordCount   --master spark://linux01:7077   --executor-memory 1g   --total-executor-cores 4   /root/spark19-1.0-SNAPSHOT.jar   hdfs://linux01:8020/wordcount.txt hdfs://linux01:8020/data/out1

参数说明:

--class 指定运行的程序的main方法全类名

--master 指定master的地址和端口,协议为spark://,端口是RPC的通信端口

--executor-memory 指定每一个executor的使用的内存大小

--total-executor-cores指定整个application总共使用的cores

jar包路径  args0  args1

查看结果

[root@linux01 spark-3.0.1-bin-hadoop3.2]# hdfs dfs -cat /data/out1/part-00000

(e,6)
(a,5)

[root@linux01 spark-3.0.1-bin-hadoop3.2]# hdfs dfs -cat /data/out1/part-00001
(d,3)
(c,3)
(b,2)
(f,1)

全局排序是降序的

7 本地运行模式

运行main方法,设置main方法的参数

 

 

 

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 使用Scala编写Spark可以提高代码的可读性和可维护性,同时也可以利用Scala的函数式编程特性来编写更加简洁和高效的代码。在编写Spark应用程序时,需要使用Spark的API来操作RDD(弹性分布式数据集),并使用Scala的语法来定义函数和变量。同时,还需要使用Spark的集群管理工具来管理集群资源,以确保应用程序能够在分布式环境下高效地运行。总之,使用Scala编写Spark是一种非常有效的方式,可以帮助开发人员快速构建高性能的大数据应用程序。 ### 回答2: Spark是一个强大的分布式计算框架,是大数据处理和分析的必备工具。Spark使用Java和Scala语言编写,其中Scala被认为是Spark的“官方语言”。因此,使用Scala编写Spark可以带来一些明显的优势: 1. 高效的并发性和容错性 Scala是一种函数式编程语言,其并发处理和容错能力非常强。因此,使用Scala编写Spark可以提高应用程序的容错性和并发性能,并允许Spark应用程序在分布式环境中更加高效地运行。 2. 易于编写和调试 Scala语言具有简洁、灵活、易于阅读和编写的特点。它有一套强大的编译器和IDE支持,可以帮助开发人员加快Spark应用程序的开发和调试效率。 3. 高度可扩展的代码库 Scala兼容Java虚拟机,因此,Scala编写的代码可以与Java代码无缝协作。此外,Scala还有大量的高质量库可以支持Spark的开发,如Spark本身所包含的ScalaSpark SQL。 总之,ScalaSpark的“官方语言”,使用Scala编写Spark可以提高性能、提高可扩展性、提高开发效率和提高代码重用性。因此,Scala被广泛应用于Spark生态系统,并被许多大型企业和研究机构所青睐。 ### 回答3: Scala 是一种多范式编程语言,旨在结合面向对象编程和函数式编程的最佳特性。Scala 语言的设计非常适合构建高效、并发和可扩展的大规模数据处理应用程序,因此广泛被用于 Apache Spark 的开发。 Apache Spark 是一个快速、分布式的计算框架,为大规模数据处理提供了高效的解决方案。Spark 具有高效的数据抽象层和强大的 API,允许开发人员使用不同的语言编写分布式计算应用程序。ScalaSpark 的默认编程语言,因此成为了 Spark 的生态系统中最重要的编程语言之一。 使用 Scala 可以让开发人员在保持高效性、并且让代码更易阅读,易于理解。而这些特性是在 Scala 的面向对象编程和函数式编程的技术支持下实现的。Scala 语言的函数式编程特性,使得 Spark 应用程序和算法可以使用带有高度抽象级别的处理类型和方法。 除此之外,在 Scala 中使用 Spark 还允许开发人员使用 REPL(交互式解释器)进行实时计算。REPL 方式可以对框架功能进行快速验证,相当于提供了丰富的分析工具对大数据进行实时处理。 Scala 的另一个优势是其强大的类型推导系统。Scala 可以通过类型推导系统自行推断变量类型和方法返回类型,这减少了开发人员的编码量,同时也帮助开发人员避免了类型错误。 因此,使用 Scala 编写 Spark 应用程序不仅保证了应用程序的高效性、可读性和可扩展性,还提供了丰富的分析工具,便于大规模数据处理的实时计算,并且通过 Scala 的强大类型推导系统减少了出错率。所以,在大规模数据处理的应用中,Scala 是用来编写 Spark 应用程序的最好选择。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值