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()

相关推荐
派可数据BI可视化1 小时前
数据指标与标签在数据分析中的关系与应用
大数据·数据仓库·商业智能bi
java1234_小锋1 小时前
详细描述一下Elasticsearch索引文档的过程?
大数据·elasticsearch·搜索引擎
黄焖鸡能干四碗1 小时前
【软件设计文档】详细设计说明书模板和实际项目案例参照,概要设计说明书,需求设计书,软件设计报告(Word原件)
大数据·软件需求·设计规范·规格说明书·1024程序员节
股票GPT分析2 小时前
《Python 股票交易分析:开启智能投资新时代》(二)
大数据·服务器·python·c#·fastapi
Viktor_Ye3 小时前
实现金蝶云星空与钉钉数据无缝集成的技术方法
java·大数据·钉钉
.生产的驴3 小时前
Docker Seata分布式事务保护搭建 DB数据源版搭建 结合Nacos服务注册
数据库·分布式·后端·spring cloud·docker·容器·负载均衡
烟雨长虹,孤鹜齐飞3 小时前
【分布式锁解决超卖问题】setnx实现
redis·分布式·学习·缓存·java-ee
Mephisto.java4 小时前
【大数据学习 | Spark-Core】关于distinct算子
大数据·hive·hadoop·redis·spark·hbase
King's King4 小时前
蜜雪冰城也入局智慧物流,包括智能控制系统集成、机器人研发销售,开始招兵买马了...
大数据·人工智能·机器人
十二点的泡面4 小时前
大数据面试题每日练习-- Hadoop是什么?
大数据·hadoop·分布式