spark总结

目录

1. Spark概述

2. 主要特点

3. 主要功能

4. 应用场景

5. 优缺点

6. 生态系统

Scala基础

RDD方法归纳

Spark SQL——结构化数据文件处理

DataFrame的创建


1. Spark概述

Spark是一个开源的、大规模的、快速的数据处理引擎,专为大规模数据处理而设计。它提供了一个统一的编程模型来处理批处理、交互式查询、实时流处理和图计算等多种类型的数据处理任务。

2. 主要特点

  • 快速:Spark使用基于内存的计算模型,能够比传统的基于磁盘的MapReduce框架(如Hadoop)快很多。
  • 易用性:提供了高级API,支持Scala、Java、Python和R等多种编程语言。
  • 通用性:Spark提供了一个统一的编程模型来处理各种类型的数据处理任务。
  • 容错性:Spark使用弹性分布式数据集(RDD)来存储数据,并支持容错和恢复。
  • 伸缩性:Spark可以在大规模集群上运行,并且可以自动管理资源。
  • 基于内存计算:Spark将数据存储在内存中,避免了磁盘I/O的瓶颈,从而大大提高了数据处理速度。
  • 通用性:Spark支持多种数据处理模型,包括批处理、流处理、机器学习和图计算等,可以满足不同类型的数据处理需求。
  • 高容错性:Spark具有强大的容错能力,能够自动恢复失败的任务,保证数据处理的稳定性和可靠性。
  • 丰富的生态系统:Spark生态系统包含多个组件,如Spark SQL、Spark Streaming、Spark MLlib和GraphX等,可以方便地进行数据分析、数据挖掘、机器学习和图计算等任务。

3. 主要功能

  • Spark Core:提供了Spark的基本功能,包括任务调度、内存管理、错误恢复等。
  • Spark SQL:提供了SQL接口和数据框架,用于处理结构化数据。
  • Spark Streaming:用于处理实时数据流,支持从Kafka、Flume等数据源接收数据。
  • MLlib:提供了大量的机器学习算法和工具,用于构建机器学习应用。
  • GraphX:用于图计算和图分析,提供了丰富的图算法和图操作。

4. 应用场景

  • 数据分析与数据挖掘:用于处理和分析大规模数据集,提取有价值的信息。
  • 实时数据分析:利用Spark Streaming处理实时数据流,实现实时数据分析。
  • 机器学习:利用MLlib构建各种机器学习模型,如分类、聚类、回归等。
  • 图计算:用于社交网络分析、推荐系统、生物信息学等领域。
  • ETL(Extract, Transform, Load):用于数据清洗、转换和加载,构建数据仓库或数据湖。

5. 优缺点

  • 优点
    • 速度快:基于内存的计算模型比传统的基于磁盘的模型快。
    • 易用性:提供了丰富的API和多种编程语言支持。
    • 通用性:支持多种类型的数据处理任务。
    • 伸缩性:可以运行在大规模集群上。
  • 缺点
    • 学习曲线陡峭:对于初学者来说,Spark的编程模型可能比较复杂。
    • 内存消耗大:由于基于内存的计算模型,Spark在处理大规模数据集时可能会消耗大量内存。
    • 对实时性要求较高:虽然Spark Streaming支持实时数据处理,但对于毫秒级的实时性要求可能不够。

6. 生态系统

Spark生态系统(也称为BDAS)包括多个组件,它们共同构成了一个强大的大数据处理平台。这些组件包括:

  • Spark Core:Spark的基本框架和核心功能。
  • Spark SQL:用于处理结构化数据。
  • Spark Streaming:用于处理实时数据流。
  • MLlib:提供了大量的机器学习算法和工具。
  • GraphX:用于图计算和图分析。
  • SparkR:提供了R语言的接口。
  • BlinkDB:一个近似查询引擎,用于在大数据集上执行快速交互式查询。
  • Tachyon:一个内存存储系统,用于提供跨集群的可靠内存级数据共享。

Scala基础


一、Scala简介
Scala源自Java,构建在JVM之上,与Java兼容、互通。

Scala的优势:

1.多范式编程:

 (1)面向对象编程:

      每个值都是对象;

      对象的数据类型和行为由类(Class)和特征(Trait,类似于interface)描述;

      利用特征实现混入式多重继承。

(2)函数式编程:

      每个函数都是一个值;

      支持高阶函数、柯里化(currying)、样例类(case class)及模式匹配......

2.Scala是静态语言,表达能力强,代码精简

3.Spark采用Scala语言设计,提供的API更加优雅,基于JVM的语言更融入Hadoop生态圈。

4.扩展性:隐式类、字符串差值

二、Scala变量(var)与常量(val)
变量:

        赋值后可以改变,生命周期中可以被多次赋值。

        var 变量名称:类型=xxx

        一般无需显示指定类型,Scala编译器会自动推断出类型

常量:

        赋值后不可变,类似于Java中的final变量

        val 常量名称:类型=xxx

三、Scala数据类型
Scala与Java有相同的数据类型,但是Scala的数据类型首字母全部大写

Byte、Short、Int、Long、Float、Double、Char、Boolean、String

1)Scala中一切数据都是对象,都是Any的子类;

2)Scala中数据类型分为两大类:数值类型(AnyVal)、引用类型(AnyRef),不管是值类型还是引用类型都是对象;

3)Scala数据类型仍然遵守,低精度的值类型向高精度值类型,自动转换(隐式转换);

4)Scala中的StringOps是对Java中的String增强;

5)Unit:对应Java中的void,用于方法返回值的位置,表示方法没有返回值。Unit是 一个数据类型,只有一个对象就是()。Void不是数据类型,只是一个关键字;

6)Null是一个类型,只有一个对象就是null。它是所有引用类型(AnyRef)的子类;

7)Nothing,是所有数据类型的子类,主要用在一个函数没有明确返回值时使用,因为这样可以把抛出的返回值,返回给任何的变量或者函数。

RDD方法归纳

1.使用map()方法转换数据
map()方法是一种基础的RDD转换操作,可以对 RDD 中的每一个数据元素通过某种函数进行转换并返回新的RDD。mapO方法是懒操作,不会立即进行计算。
 转换操作是创建RDD的第二种方法,通过转换已有RDD生成新的RDD。因为RDD是一个不可变的集合,所以如果对 RDD 数据进行了某种转换,那么会生成一个新的 RDD。

2.使用 sortBy()方法进行排序
sortBy0方法用于对标准RDD 进行排序,有3个可输人参数,说明如下。

(1)第1个参数是一个函数f:(T)=>K,左边是要被排序对象中的每一个元素,右边返回的值是元素中要进行排序的值。

(2)第2个参数是 ascending,决定排序后 RDD 中的元素是升序的还是降序的,默认是 true,即升序排序,如果需要降序排序则需要将参数的值设置为 false。

(3)第3个参数是numPartitions,决定排序后的RDD 的分区个数,默认排序后的分区个数和排序之前的分区个数相等,即 this.partitions.size。

第一个参数是必须输人的,而后面的两个参数可以不输人。例如,通过一个存放了 3个二元组的列表创建一个 RDD,对元组的第二个值进行降序排序,分区个数设置为1,代码如下

3.使用collect()方法查询数据
collect:直接调用 collect 返回该 RDD 中的所有元素,返回类型是一个 Array[T数组,这是较为常用的一种方式。

4.使用flatMap()方法转换数据
flatMap()方法将函数参数应用于RDD之中的每一个元素,将返回的迭代器(如数组、列表等)中的所有元素构成新的RDD。

使用flatMap()方法时先进行map(映射)再进行flat(扁平化)操作,数据会先经过跟map一样的操作,为每一条输入返回一个迭代器(可迭代的数据类型),然后将所得到的不同级别的迭代器中的元素全部当成同级别的元素,返回一个元素级别全部相同的RDD。这个转换操作通常用来切分单词。

5.使用take()方法查询某几个值
take(N)方法用于获取RDD的前N个元素,返回数据为数组。take()与collect()方法的原理相似,collect()方法用于获取全部数据,take()方法获取指定个数的数据。

6.使用union()方法合并多个RDD
union()方法是一种转换操作,用于将两个RDD合并成一个,不进行去重操作,而且两个RDD中每个元素中的值的个数、数据类型需要保持一致。

7.使用filter()方法进行过滤
filter()方法是一种转换操作,用于过滤RDD中的元素。

8.使用distinct()方法进行去重
distinct()方法是一种转换操作,用于RDD的数据去重,去除两个完全相同的元素,没有参数。创建一个带有重复数据的RDD,并使用distinct()方法去重。

Spark SQL——结构化数据文件处理

DataFrame简介
DataFrame可以看作是分布式的Row对象的集合,在二维表数据集的每一列都带有名称和类型,这就是Schema元信息,这使得Spark框架可获取更多数据结构信息,从而对在DataFrame背后的数据源以及作用于DataFrame之上数据变换进行针对性的优化,最终达到提升计算效率。

DataFrame 是 Spark SQL 提供的一个分布式数据集,它是带有 Schema 元信息的 DataSet,可以看作是关系数据库中的一个表。DataFrame 可以从多种源构建,如结构化数据文件、Hive 表、外部数据库或现有的 RDD。它支持 Spark SQL 查询和 DataFrame API,可以方便地进行数据处理和转换。

DataFrame的创建

创建DataFrame的两种基本方式:

已存在的RDD调用toDF()方法转换得到DataFrame

通过Spark读取数据源直接创建DataFrame

  • 8
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值