Spark的初步入门(基本操作)

简介

  Apache Spark 是专为大规模数据处理而设计的快速通用的计算引擎。Spark是UC Berkeley AMP lab (加州大学伯克利分校的AMP实验室)所开源的类Hadoop MapReduce的通用并行框架,Spark,拥有Hadoop MapReduce所具有的优点;但不同于MapReduce的是——Job中间输出结果可以保存在内存中,从而不再需要读写HDFS,因此Spark能更好地适用于数据挖掘与机器学习等需要迭代的MapReduce的算法。

  Spark 是一种与 Hadoop 相似的开源集群计算环境,但是两者之间还存在一些不同之处,这些有用的不同之处使 Spark 在某些工作负载方面表现得更加优越,换句话说,Spark 启用了内存分布数据集,除了能够提供交互式查询外,它还可以优化迭代工作负载。

  Spark 是在 Scala 语言中实现的,它将 Scala 用作其应用程序框架。与 Hadoop 不同,Spark 和 Scala 能够紧密集成,其中的 Scala 可以像操作本地集合对象一样轻松地操作分布式数据集。

来自:https://baike.baidu.com/item/spark/2229312

特点

  1.快:与Hadoop的MapReduce相比,Spark基于内存的运算要快100倍以上,基于硬盘的运算也要快10倍以上。Spark实现了高效的DAG执行引擎,可以通过基于内存来高效处理数据流。计算的中间结果是存在于内存中的。

  2.易用:Spark支持Java、Python和Scala的API,还支持超过80种高级算法,使用户可以快速构建不同的应用。而且Spark支持交互式的Python和Scala的shell,可以非常方便地在这些shell中使用Spark集群来验证解决问题的方法。

  3.通用:Spark提供了统一的解决方案。Spark可以用于批处理、交互式查询(Spark SQL)、实时流处理(Spark Streaming)、机器学习(Spark MLlib)和图计算(GraphX)。这些不同类型的处理都可以在同一个应用中无缝使用。Spark统一的解决方案非常具有吸引力,毕竟任何公司都想用统一的平台去处理遇到的问题,减少开发和维护的人力成本和部署平台的物力成本。

  4.兼容性:Spark可以非常方便地与其他的开源产品进行融合。比如,Spark可以使用Hadoop的YARN和Apache Mesos作为它的资源管理和调度器器,并且可以处理所有Hadoop支持的数据,包括HDFS、HBase和Cassandra等。这对于已经部署Hadoop集群的用户特别重要,因为不需要做任何数据迁移就可以使用Spark的强大处理能力。Spark也可以不依赖于第三方的资源管理和调度器,它实现了Standalone作为其内置的资源管理和调度框架,这样进一步降低了Spark的使用门槛,使得所有人都可以非常容易地部署和使用Spark。此外,Spark还提供了在EC2上部署Standalone的Spark集群的工具。

来自:https://spark.apache.org/

运行方式

1.local模式

所有的计算都运行在一个线程当中,没有任何并行计算,通常都是练习的时候使用
  local[K]:这里的k指的是运行的k个进程,

  local[*]:按照CPU最多的核心设置进程

2.Standalone模式

运行在集群上面

3.Yarn模式

运行yarn上,不布置额外的集群

4.Mesos模式

运行在Mesos上,Mesos是Apache下的开源分布式资源管理框架

这里是使用的scala语言进行编写的,安装配置及学习Scala语言可以去这里参考:https://blog.csdn.net/qq_43222167/article/details/107580423

开始操作

1.导入jar包

<properties>
        <scala.version>2.12.8</scala.version>
    </properties>

    <dependencies>

        <dependency>
            <groupId>org.scala-lang</groupId>
            <artifactId>scala-library</artifactId>
            <version>${scala.version}</version>
        </dependency>

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

        <!-- https://mvnrepository.com/artifact/org.apache.spark/spark-mllib -->
        <dependency>
            <groupId>org.apache.spark</groupId>
            <artifactId>spark-mllib_2.11</artifactId>
            <version>2.2.0</version>
            <scope>runtime</scope>
        </dependency>

        <!-- https://mvnrepository.com/artifact/org.apache.hive/hive-jdbc -->
        <dependency>
            <groupId>org.apache.hive</groupId>
            <artifactId>hive-jdbc</artifactId>
            <version>1.2.1</version>
        </dependency>

        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>5.1.37</version>
        </dependency>

        <dependency>
            <groupId>org.jblas</groupId>
            <artifactId>jblas</artifactId>
            <version>1.2.3</version>
        </dependency>

    </dependencies>

2.编写代码

package com.jbit.test

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

/**
 * Spark的初步入门
 */
object Test {

  def main(args: Array[String]): Unit = {
    // 创建配置对象
    // setMaster中的值为: local  Standalone  Yarn  Mesos
    // setAppName的值可以随意定义
    var conf=new SparkConf().setMaster("local").setAppName("a")

    // 创建Spark对象并将配置好的对象放进去
    var spark=new SparkContext(conf)

    //单纯的读取文件,不做任何处理
    var readFile=spark.textFile("D:\\test.txt");

    //输出读取的文件中的内容
    readFile.foreach(println(_))

    //将文件中的内容按照特定的格式拆分出来且返回
    readFile.flatMap(
      line =>{
        line.split("~")
      }
    ).foreach(println(_))

    //读取哪个文件并且根据指定的规则拆分计算
    var data=spark.textFile("D:\\test.txt").flatMap(
      line => {
        //按什么规则拆分
        line.split("~")
      }
     //转换成map(键对值)
    ).map(
      line => (line,1)
    )

    //按照本身格式输出键对值(keys -> 值, ...)
    println(data.countByKey())

    //按照特定的格式输出所有键对值:(java,3)
    data.countByKey().foreach(println(_))

    //输出所有的key
    println(data.countByKey().keys)

    //输出所有的value
    println(data.countByKey().values)

  }

}


D盘下面test.txt文件中的内容为

在这里插入图片描述

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

测试结果

1.单纯的读取文件中的内容
在这里插入图片描述
2.将文件中的内容按照特定的格式拆分出来且返回
在这里插入图片描述

3.本身格式的值
在这里插入图片描述

4.自定义格式的值
在这里插入图片描述

5.所有的键
在这里插入图片描述

6.所有的value
在这里插入图片描述


这些红色的输出信息皆是Spark的日志信息

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值