spark的学习(1)之使用spark进行WordCount词数统计

Spark是一种由scala编写的快速、通用、可扩展的大数据分析引擎

一、简单介绍

下面是对spark的简单介绍,嗯,主要就是说下spark有多好多好的,不想看的可以直接去看写项目

特点

1)快:基于内存进行计算,快。

2)易用:支持java,python,scala API,语法简洁。

3)通用:针对于大数据离线,实时有一系列处理方案,方便。

4)兼容性:基于java,可以很好的和其他大数据技术融合,比如说使用YARN调用。

二、写项目

我们先去写一个最简单应用让大家理解Spark,使用Spark的方法其实和其他框架都差不多,第一步多需要插入jar包,

1、jar包

我们需要先创建一个普通maven项目,然后在项目pom文件下引入maven依赖,如果引入过了就不需要引入了。

这里注意,我是用的软件是idea,需要提前在idea中下载scala插件

<dependencies>
        <!-- scala依赖 开始 -->
        <dependency>
            <groupId>org.scala-lang</groupId>
            <artifactId>scala-reflect</artifactId>
            <version>2.12.8</version>
            <scope>compile</scope>
        </dependency>
        <dependency>
            <groupId>org.scala-lang</groupId>
            <artifactId>scala-library</artifactId>
            <version>2.12.8</version>
            <scope>compile</scope>
        </dependency>
        <dependency>
            <groupId>org.scala-lang</groupId>
            <artifactId>scala-compiler</artifactId>
            <version>2.12.8</version>
            <scope>compile</scope>
        </dependency>

        <!-- scala依赖 结束 -->

        <!-- spark依赖 开始 -->
        <dependency>
            <groupId>org.apache.spark</groupId>
            <artifactId>spark-sql_2.12</artifactId>
            <version>2.4.3</version>
        </dependency>

        <dependency>
            <groupId>org.apache.spark</groupId>
            <artifactId>spark-mllib_2.12</artifactId>
            <version>2.4.3</version>
        </dependency>

        <!-- spark依赖 结束 -->
    </dependencies>

    <build>
        <plugins>
            <!-- 该插件用于将 Scala 代码编译成 class 文件 -->
            <plugin>
                <groupId>net.alchim31.maven</groupId>
                <artifactId>scala-maven-plugin</artifactId>
                <version>3.4.6</version>
                <executions>
                    <execution>
                        <!-- 声明绑定到 maven 的 compile 阶段 -->
                        <goals>
                            <goal>testCompile</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>

            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-assembly-plugin</artifactId>
                <version>3.0.0</version>
                <configuration>
                    <descriptorRefs>
                        <descriptorRef>jar-with-dependencies</descriptorRef>
                    </descriptorRefs>
                </configuration>
                <executions>
                    <execution>
                        <id>make-assembly</id>
                        <phase>package</phase>
                        <goals>
                            <goal>single</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>
        </plugins>
    </build>

2、创建数据集

我们需要创建一个数据集,让spark可以用于计算,在项目目录下创建data文件夹存放数据,创建word文件并输入下面的内容,

java~hadoop~java
html~js
java
js~jquery

接下来的任务就是使用spark统计整个文档中每个单词出现的数量

3、编写对应的处理类开始计算

在java(不喜欢也可以重命名scala)文件夹下创建包,然后创建WordCount.scala文件,注意文件类型为object,使用Spark的顺序大致为

​ 1、创建Spark上下文

​ 2、读取数据文件

​ 3、处理转换数据为合适的格式

​ 4、统计计算

具体处理代码如下

object WordCount {

  def main(args: Array[String]): Unit = {
    // 创建Spark上下文
    /*
    其中master指的是运行模式
    1、local模式
      本地模式,所有计算都运行在一个线程当中,没有任何并行计算,通常练习时使用
      local[K]:这里的k指的是运行的k个进程,
      local[*]:按照CPU最多的核心设置进程
    2、Standalone模式
      运行在集群上
    3、Yarn模式
      运行yarn上,不布置额外的集群
    4、Mesos模式
      运行在Mesos上, Mesos是Apache下的开源分布式资源管理框架
      */
    val spark = new SparkContext("local",
      "WordCount")

    // 读取数据,word就是刚创建的文件
    val data = spark.textFile("data/word")

    // 转换为方便计算的格式
    val result = data
      .flatMap(_.split("~")) // 使用~切分每条记录,这里面的_代表data中的一条记录,spark会根据换行符进行切分,然后分别传入
      .map((_,1)) // java,1 html,1
     .countByKey() // 最后一步,统计相同key值的数量

    println(result)
  }

}

运行main函数,就开始执行整个程序,最后会打印每个单词出现的数量,输出结果如下

Map(java -> 3, hadoop -> 1, jquery -> 1, js -> 2, html -> 1)

这个就是一个最为简单的Spark使用案例,但是也是个最为常用的例子,我们可以根据这个例子做很多内容,比如说统计一个购物数据集中,某商品ID出现的次数,使用这个次数表示商品的受欢迎程度。

代码地址在下面:
https://gitee.com/lihao2/blog-code.git
名称和博客名称相同

我将在下一篇中讲如何使用上面例子相关方法,去统计某市,最受欢迎的美食种类。关注博主不走丢

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值