数据挖掘spark介绍

SPARK、PYSPARK介绍

了解什么是Spark、pySpark

定义:Apache Spark是用于大规模数据(Large scale data)处理的统一(unified)分析引擎

简单来说,Spark是一款分布式的计算框架,用于调度成百上千的服务器集群,计算TB、PB乃至EB级别的海量数据

python on Spark

Spark作为全球顶级的分布式计算框架,支持众多的编程语言进行开发,而python语言,则是Spark重点支持的方向

pySpark

Spark对python语言的支持,重点体现在,python第三方库:PySpark之上

PySpark是由Spark官方开发的Python语言第三方库

Python开发者可以使用pip程序快速安装PySpark并像其它三方库那样直接使用

作为python库进行数据处理

PySpark

提交至Spark集群进行分布式集群计算

基础准备

PySpark库的安装

在命令提示符(Mac终端)程序内,输入:

pip install pyspark ​ 

#或者使用国内镜像源(清华大学源) 
pip install -i https://pypi.tuna.tsinghua.edu.cn/simple pyspark

PySpark执行环境入口对象的构建

使用PySpark库完成数据处理,首先需要构建一个执行环境入口对象

PySpark的执行环境入口对象是:类Spark Context的类对象

# 导包
from pyspark import SparkConf, SparkContext
​
# 创建SparkContext类对象
#setMaster("loca[*]") ---spark运行模式    loca[*] -----本地、单机模式
#setAppName("test_spark_app") -----给当前的spark设置app名称
conf = SparkConf().setMaster("loca[*]").setAppName("test_spark_app")
​
# 基于SparkConf类对象创建SparkContext类对象
sc = SparkContext(conf=conf)
​
# 打印PySpark的运行版本
print(sc.version)
​
# 停止SparkContext对象的运行版本(停止PySpark程序)
sc.stop()

PySpark的编程模型

SparkContext类对象,是PySpark编程中一切功能的入口

PySpark的编程,主要分为三步骤: 1.数据输入

通过SparkContext类对象的成员方法完成数据的读取操作读取后得到RDD类对象

2.数据处理计算

通过RDD类对象的成员方法完成各种数据计算的需求

3.数据输出

将处理完成后的RDD类对象调用各种成员方法完成写出文件、转换为list等操作

通过SparkContext对象,完成数据输入

输入数据后得到RDD类对象,对RDD类对象进行迭代计算

最终通过RDD类对象的成员方法,完成数据输出工作

数据输入

RDD类对象

PySpark支持多种数据的输入,在输入完成后,都会得到一个:RDD类对象

RDD全称:弹性分布式数据集(Resilient Distributed Datasets)

PySpark针对数据的处理,都是以RDD类对象作为载体,即:

数据存储在RDD内

各类数据的计算方法,也都是RDD的成员方法

RDD的数据计算方法,返回值依旧是RDD类对象

PySpark输入方法

PySpark数据容器转RDD对象

PySpark支持通过PySpark Context对象的parallelize成员方法,将:

list、tuple、set、dict、str。。转换为PySpark的RDD对象

注意⚠️:

字符串会被拆分出一个个的字符,存入对象

字典仅有key会被存入RDD对象

# 数据输入
# 导包
from pyspark import SparkContext, SparkConf

# 创建SparkContext类对象
conf = SparkConf().setMaster("local[*]").setAppName("test_spark_app")

# 基于SparkConf类对象创建SparkContext类对象
sc = SparkContext(conf=conf)

# 第一种方法
# 通过parallelize方法将python对象加载待spark内,成为RDD对象
rdd1 = sc.parallelize([1, 2, 3, 4, 5])  # 列表
rdd2 = sc.parallelize((1, 2, 3, 4, 5))  # 元祖
rdd3 = sc.parallelize("abcd")  # 字符串
rdd4 = sc.parallelize({1, 2, 3, 4, 5})  # 集合
rdd5 = sc.parallelize({"key1": "value"})  # 字典

# 如果要查看RDD里面有什么内容,需要用collect()方法
print(rdd1.collect())

# 第二种方法
# 用过textFile方法,读取文件数据加载Spark内,成为RDD对象
rdd = sc.textFile("/Users/a123/Documents/大数据与应用技术竞赛/assets/hello.rtf")

print(red.colleect)


sc.stop()

数据计算

Map 方法

PySpark的数据计算,都是基于RDD对象来进行的,自然是依赖,RDD对象内置丰富的:成员方法(算子)

map算子

功能:map算子,是将RDD的数据一条条处理(处理的逻辑基于map算子中接收的处理函数),返回新的RDD

语法:

rdd.map(func)
#func: f:(T) -> U
#f: 表示这是一个函数(方法)
#(T) -> U 表示的是方法的定义:
#   ()  表示传入参数, (T)表示 传入1个参数,()表示没有传入参数
#T  是泛型的代称,在这里表示  任意类型
#U  也是泛型代称,在这里表示  任意类型
​
# -> 表示返回值
​
#(T)  -> U  总结意思:这是一个方法,这个方法接收一个参数传入,传入参数类型不限,返回一个返回值,返回值泛型不限
​
#(A) -> A   总结意思:这是一个方法,这个方法接收一个参数传入,传入参数类型不限,返回一个返回值,返回值和传入参数类型一致
"""

数据计算
map方法

"""

from pyspark import SparkConf, SparkContext
import os

os.environ["PYSPARK_PYTHON"] = "/Users/a123/Documents/大数据与应用技术竞赛/数据挖掘/pyspark/venv/bin/python"

conf = SparkConf().setMaster("local[*]").setAppName("test_spark")
sc = SparkContext(conf=conf)

# 初始RDD
rdd = sc.parallelize([1, 2, 3, 4, 5])


# map方法将全部数据都乘以10
def func(data):
    return data * 10


rdd2 = rdd.map(func)

print(rdd2)

flatmap方法

flatmap算子

功能:对rdd执行map操作,然后进行解除嵌套操作

解除嵌套

#嵌套的list

lst = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]

#如果解除嵌套

lst = [1, 2, 3, 4, 5, 6, 7, 8, 9]

"""
flatmap算子

"""
from pyspark import SparkContext, SparkConf

if __name__ == '__main__':
    # 构建Spark执行环境
    conf = SparkConf().setAppName("create rdd").setMaster("local[*]")
    sc = SparkContext(conf=conf)

    rdd = sc.parallelize(["a, b, c", "a, c, e", "e, c, a"])

    # 按照空格切分数据后,提取rdd数据
    rdd2 = rdd.map(lambda x: x.split(" "))
    print(rdd2.collect())

    # 按照空格切分数据后,解除嵌套
    rdd2 = rdd.flatmap(lambda x: x.split(" "))
    print(rdd2.collect())

reduce Bykey方法

redece Bykey算子

功能:针对KV型RDD,自动按照key分组,然后根据你提供的聚合逻辑,完成组内数据(value)

KV型RDD:二元元祖

的聚合操作

用法:

rdd.reduceBykey(func)

# func:(v, v) --> v

#接受2个传入参数(类型要一致,返回一返回值,类型和传入要一致.)

"""
reduce Bykey算子

"""

from pyspark import SparkContext, SparkConf
import os

os.environ["PYSPARK_PYTHON"] = "/Users/a123/Documents/大数据与应用技术竞赛/数据挖掘/pyspark/venv/bin/python"

# 构建Spark执行环境
conf = SparkConf().setMaster("local[*]").setAppName("test_spark")
sc = SparkContext(conf=conf)

rdd = sc.parallelize([('a', 1), ('a', 1), ('b', 1), ('b', 1), ('b', 1)])

result = rdd.reduceByKey(lambda a, b: a + b)
print(result.collect())

注意:reduceBykey中接收函数,只负责聚合,不理会分组,分组是自动bykey来分组的

reduceBykey中的聚合逻辑:
比如,有[1, 2, 3, 4, 5], 然后聚合函数是:lambda a, b: a + b

接收一个处理函数,对数据进行两两计算

练习

filter方法

distinct方法

sortBy方法

练习

综合案例

分布式集群运行

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Grey_hat_cmd

您的鼓励将是我创作最大的动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值