1.1、Pyspark模块介绍.

本文深入解析PySpark的五大核心模块,包括基础的pyspark模块、支持SQL的pyspark.sql模块、处理流数据的pyspark.streaming模块、基于DataFrame的机器学习模块pyspark.ml及基于RDD的机器学习模块pyspark.mllib。每个模块的功能、关键组件及其实现的API被详细阐述,为读者提供了全面的PySpark使用指南。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

pyspark是Spark的python API,提供了使用python编写并提交大数据处理作业的接口。

在pyspark里大致分为5个主要的模块

1. pyspark模块,这个模块四最基础的模块,里面实现了最基础的编写Spark作业的API。这个模块里面有以下内容:

Sparkcontext:它是编写Spark程序的主入口

RDD:分布式弹性数据集,是Spark内部中最重要的抽象

Broadcast:在各个任务task中重复使用的广播变量

Accumulator:一个只能增加的累加器,在各个任务中都可以进行累加,最终进行全局累加

SparkConf:一个配置对象,用来对Spark中的例如资源,内核个数,提交模式等的配置

SparkFiles:文件访问API

StorageLevel:它提供了细粒度的对于数据的缓存、持久化级别

TaskContext:实验性质的API,用于获取运行中任务的上下文信息。

2.pyspark.sql模块,这个模块是架构在RDD之上的高级模块,提供了SQL的支持,包含以下内容:

SparkSession:SparkSQL的主入口,其内部仍然是调用SparkContext的

DataFrame:分布式的结构化的数据集,最终的计算仍然转换为RDD上的计算

Column:DataFrame中的列

Row:DataFrame中的行

GroupedData:这里提供聚合数据的一些方法

DataFrameNaFunctions:处理缺失数据的方法

DataFrameStatFunctions:提供统计数据的一些方法

functions:内建的可用于DataFrame的方法

types:可用的数据类型

Window:提供窗口函数的支持

3.pyspark.streaming这个模块主要是用来处理流数据,从外部的消息中间件如kafka,flume或者直接从网络接收数据,来进行实时的流数据处理。其内部会将接收到的数据转换为DStream,DStream的内部实际上就是RDD。pyspark.streaming对流数据的支持还不是很完善,不如原生的Scala语言和Java语言。

4.pyspark.ml这个模块主要是做机器学习的,里面实现了很多机器学习算法,包括分类、回归、聚类、推荐。这个的内容我们会囊括最主要的机器学习算法。pyspark.ml这个模块现已经成为主要的机器学习模块,其内部实现是基于DataFrame数据框。

5.pyspark.mllib这个模块也是做机器学习的,但是这个模块底层使用的RDD,RDD在性能上优化的余地较少,因此现在最新的机器学习算法都是用基于DataFrame的API来实现。但这个模块里面也有很多有用的机器学习算法,我们可以适当的把玩一下。

这段代码是使用 PySpark 从 MySQL 数据库中读取数据,将每一行的 taglist 字段转换为列表,统计列表中每个元素出现的次数,然后将结果转换为 Pandas 数据帧,最后使用 matplotlib 绘制饼图。 这段代码的详细解释如下: 1. 导入需要的模块 ``` from pyspark.sql import SparkSession import matplotlib.pyplot as plt from pyspark.sql.types import StructField, StringType, StructType ``` 这里导入了 `SparkSession` 用于创建 Spark 应用程序,`matplotlib.pyplot` 用于绘制饼图,`StructField`、`StringType`、`StructType` 用于定义数据结构。 2. 配置 MySQL 连接参数 ``` options = { "url": "jdbc:mysql://localhost:3306/test?useSSL=true", "driver": "com.mysql.jdbc.Driver", "dbtable": "(SELECT taglist from travels_detail where taglist !='None') t1", "user": "root", "password": "root" } ``` 这里定义了连接 MySQL 数据库的参数,包括 URL、驱动程序、表名、用户名和密码。 3. 创建 SparkSession ``` spark = SparkSession.builder.getOrCreate() ``` 这里创建了一个 SparkSession 对象,用于连接 Spark 集群。 4. 加载 MySQL 数据 ``` data = spark.read.format("jdbc").options(**options).load() ``` 这里使用 `SparkSession` 对象的 `read` 方法,读取 MySQL 数据库中的数据。 5. 将每一行的 taglist 转为列表 ``` def convert_to_list(line): tmp_list = line[0].replace("#", "").split(",") datas = [] for i in tmp_list: if len(i) > 0 and "牛" not in i: datas.append((i, 1)) return datas rdd = data.rdd.flatMap(lambda line: convert_to_list(line)).reduceByKey(lambda x, y: x + y) ``` 这里定义了一个函数 `convert_to_list`,用于将每一行的 taglist 字段转换为列表,并且去掉其中的 "#" 和 "牛",统计列表中每个元素出现的次数。 然后使用 `flatMap` 将每一行的 taglist 转换为一个元素为 `(tag, 1)` 的列表,再使用 `reduceByKey` 统计每个 tag 出现的次数。 6. 将数据转换为 Pandas 数据帧 ``` schemaString = "tag count" fields = [StructField(field_name, StringType(), True) for field_name in schemaString.split()] schema = StructType(fields) schema_data = spark.createDataFrame(rdd, schema).orderBy("count", ascending=False) result_pdf = schema_data.limit(5).toPandas() ``` 这里先定义了一个字符串 `schemaString`,表示数据结构的字段名,然后使用 `StructField` 和 `StructType` 定义了数据结构。 接着使用 `createDataFrame` 方法将 RDD 转换为 DataFrame,并按照 `count` 字段降序排序,最后使用 `limit` 和 `toPandas` 方法将结果转换为 Pandas 数据帧。 7. 绘制饼图 ``` plt.rcParams['font.family'] = ['sans-serif'] plt.rcParams['font.sans-serif'] = ['SimHei'] plt.pie(result_pdf["count"], labels=result_pdf["tag"], shadow=True, autopct='%1.1f%%') plt.legend() plt.show() ``` 这里设置 matplotlib 支持中文,然后使用 `pie` 方法绘制饼图,其中 `result_pdf["count"]` 和 `result_pdf["tag"]` 分别表示数据帧中的 `count` 和 `tag` 列。最后使用 `legend` 和 `show` 方法显示图表。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值