Spark基础知识

一.SPark基本介绍

1.Spark是什么?

1.1 定义

Apache Spark是用于大数据处理的统一分析引擎;

1.2 Spark与MapReduce对比

MapReduce的主要缺点:

①MapReduce是基于进程进行数据处理,进程相对与线程来说,创造和销毁的过程比较耗费资源,并且速度比较慢;

②MapReduce在运行的时候,中间有大量的磁盘IO过程,也就是磁盘数据到内存,内存到磁盘的读写过程;

③MapReduce只提供了非常低级的编程API,如果需要实现复杂的程序,就需要大量的代码;

Spark相对MapReduce的优点:

①Spark是基于线程来执行任务;

②引入了新的数据结构RDD(弹性分布式数据集),可以让Spark程序主要基于内存运行,内存的读写数据速度相对磁盘快很多;

③Spark提供了非常丰富的API,可以轻松的实现功能开发;

1.3 进程和线程的对比

线程的创建和销毁,比线程更加的迅速,也更节省资源;

进程很难共享内存中的数据,而同一个进程下的线程可以共享内存数据;

2. Spark的发展

2014年Spark称为顶级项目,2016年Spark2.0发布,2019年Spark3.0发布;

3. Spark的特点

①速度快:提供了一个全新的数据结构RDD(弹性分布式数据集),可以主要基于内存运行Spark程序,当内存不足时,可以放到磁盘上.整个流程是基于有向无环图(DAG)执行方案.Task线程完成计算任务执行;

②易用性:支持多种语言开发(Python,SQL,Java,Scala),降低了上手难度;

③通用性:在Spark基础上,Spark还提供了Spark SQL,Spark Streaming,MLlib及GraphX在内的多个工具库,我们可以在一个应用中无缝使用这些工具库;

④兼容性:可以在任何地方运行;

支持第三方工具接入

存储工具:hdfs,kafka,hbase

资源调度:yarn,Kubernetes(K8s容器),standalone(Spark自带)

高可用:zookeeper

支持多种操作系统:Windows,Linux,Mac

  1. Spark框架模块

Spark Core API:实现了Spark的基本功能,包含RDD,任务调度,内存管理,错误回复,与存储系统交互等模块.数据结构RDD

Spark SQL:我们使用SQL处理结构化数据.数据结构:Dataset/DataFrame=RDD+Schema;

Structured Streaming:基于Spark SQL进行流式/实时的处理组件,主要处理结构化数据

Streaming(Spark Streaming):提供的对实时数据进行流式计算的组件,底层依然是离线计算,只不过时间粒度很小,攒批。

MLlib:提供常见的机器学习(ML)功能的程序库。包括分类、回归、聚类、协同过滤等。

GraphX:Spark中用于图计算的API,性能良好,拥有丰富的功能和运算符,能在海量数据上自如地运行复杂的图算法。

二.Spark入门案例

1.需求描述

读取文本文件,文件内容是一行一行的文本,每行文本含有多个单词,单词间使用空格分隔。统计文本中每个单词出现的总次数。WordCount词频统计。

文本内容如下:

hello hello spark

hello heima spark

2.代码编写

from pyspark import SparkConf, SparkContext

import os

绑定指定的Python解释器

os.environ['SPARK_HOME'] = '/export/server/spark'

os.environ['PYSPARK_PYTHON'] = '/root/anaconda3/bin/python3'

os.environ['PYSPARK_DRIVER_PYTHON'] = '/root/anaconda3/bin/python3'

创建main函数

if name == 'main':

print("Spark入门案例: WordCount词频统计")

1- 创建SparkContext对象

"""

setAppName:设置PySpark程序运行时的名称

setMaster:设置PySpark程序运行时的集群模式

"""

conf = SparkConf()\

.setAppName('spark_wordcount_demo')\

.setMaster('local[*]')

sc = SparkContext(conf=conf)

2- 数据输入

init_rdd = sc.textFile("file:///export/data/gz16_pyspark/01_spark_core/data/content.txt")

3- 数据处理

文本内容切分

flatmap_rdd = init_rdd.flatMap(lambda line: line.split(" "))

数据格式转换

map_rdd = flatmap_rdd.map(lambda word: (word,1))

reduceByKey底层运行过程分析:

1- 该算子同时具备分组和聚合的功能。而且是先对数据按照key进行分组,对相同key的value会形成得到List列表。再对分组后的value列表进行聚合。

2- 分组和聚合功能不能分割,也就是一个整体

result = map_rdd.reduceByKey(lambda agg,curr: agg+curr)

4- 数据输出

"""

collect():用来收集数据,返回值类型是List列表

"""

print(result.collect())

5- 释放资源

sc.stop()

相关推荐
学习中的阿陈8 小时前
Hadoop伪分布式环境配置
大数据·hadoop·分布式
程序员小羊!9 小时前
大数据电商流量分析项目实战:Spark SQL 基础(四)
大数据·sql·spark
CesareCheung9 小时前
JMeter分布式压力测试
分布式·jmeter·压力测试
失散1310 小时前
分布式专题——10.5 ShardingSphere的CosID主键生成框架
java·分布式·架构·分库分表·shadingsphere
TDengine (老段)11 小时前
TDengine 特殊函数 MODE() 用户手册
大数据·数据库·物联网·时序数据库·iot·tdengine·涛思数据
xiaofan67201312 小时前
大数据与财务管理专业如何转型做金融科技?
大数据·科技·金融
kaomiao202513 小时前
空间信息与数字技术和传统GIS专业有何不同?
大数据·信息可视化·数据分析
IT研究室13 小时前
大数据毕业设计选题推荐-基于大数据的健康与生活方式数据可视化分析系统-Spark-Hadoop-Bigdata
大数据·hadoop·spark·毕业设计·源码·数据可视化·bigdata
尺度商业13 小时前
2025服贸会“海淀之夜”,点亮“科技”与“服务”底色
大数据·人工智能·科技
eqwaak013 小时前
科技信息差(9.13)
大数据·开发语言·人工智能·华为·语言模型