前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Python如何进行大数据分析?

Python如何进行大数据分析?

作者头像
快学Python
发布2022-11-28 14:05:08
6930
发布2022-11-28 14:05:08
举报
文章被收录于专栏:快学Python快学Python

人生苦短,快学Python!

大家应该都用Python进行过数据分析吧,Pandas简直就是数据处理的第一利器。但是不知道大家有没有试过百万级以上的数据,这时候再用Pandas处理就是相当的慢了。

那么对于大数据来说,应该用什么处理呢?

在公司的日常工作中,其实会使用Spark来进行大数据分析偏多。企业数据的分析始于读取、过滤和合并来自多个数据源的文件和数据流[1]。

Spark数据处理引擎是这方面的佼佼者,可处理各种量级的数据,其传输速度比Hadoop系统快100倍。得益于SQL的支持、直观的界面和简单的多语言API,你可轻松使用Spark,而不必学习复杂的新型生态系统。

对于Python爱好者来说PySpark则更为熟悉,我们可以通过调用Python API的方式来编写Spark程序,它支持了大多数的Spark功能,比如SparkDataFrame、Spark SQL、Streaming、MLlib等等。

关于PySpark与GraphFrames的安装与使用可以查看这篇博客:

https://xxmdmst.blog.csdn.net/article/details/123009617

下面我们通过一个小案例,来看看如果用PySpark求解问题[2]。

PySpark求解连通图问题

刘备和关羽有关系,说明他们是一个社区,刘备和张飞也有关系,那么刘备、关羽、张飞归为一个社区,以此类推。

对于这个连通图问题使用Pyspark如何解决呢?

首先,我们创建spark对象:

代码语言:javascript
复制
from pyspark.sql import SparkSession, Row
from graphframes import GraphFrame

spark = SparkSession \
    .builder \
    .appName("PySpark") \
    .master("local[*]") \
    .getOrCreate()
sc = spark.sparkContext
# 设置检查点目录
sc.setCheckpointDir("checkpoint")

然后构建数据:

代码语言:javascript
复制
data = [
    ['刘备', '关羽'],
    ['刘备', '张飞'],
    ['张飞', '诸葛亮'],
    ['曹操', '司马懿'],
    ['司马懿', '张辽'],
    ['曹操', '曹丕']
]
data = spark.createDataFrame(data, ["人员", "相关人员"])
data.show()

输出结果:

代码语言:javascript
复制
+------+--------+
|  人员|相关人员|
+------+--------+
|  刘备|    关羽|
|  刘备|    张飞|
|  张飞|  诸葛亮|
|  曹操|  司马懿|
|司马懿|    张辽|
|  曹操|    曹丕|
+------+--------+

很明显原始数据就是图计算所要求的边数据,只修改一下列名即可:

代码语言:javascript
复制
edges = data.toDF("src", "dst")
edges.printSchema()

输出结果:

代码语言:javascript
复制
root
 |-- src: string (nullable = true)
 |-- dst: string (nullable = true)

下面我们开始构建顶点数据:

代码语言:javascript
复制
vertices = (
    edges.rdd.flatMap(lambda x: x)
            .distinct()
            .map(lambda x: Row(x))
            .toDF(["id"])
)
vertices.show()

输出结果:

代码语言:javascript
复制
+------+
|    id|
+------+
|诸葛亮|
|  刘备|
|  曹操|
|司马懿|
|  曹丕|
|  关羽|
|  张飞|
|  张辽|
+------+

下面使用spark的图计算 计算连通图:

代码语言:javascript
复制
g = GraphFrame(vertices, edges)
result = g.connectedComponents().orderBy("component")
result.show()

输出结果:

代码语言:javascript
复制
+------+------------+
|    id|   component|
+------+------------+
|司马懿|           0|
|  张辽|           0|
|  曹丕|           0|
|  曹操|           0|
|  关羽|635655159808|
|  刘备|635655159808|
|  张飞|635655159808|
|诸葛亮|635655159808|
+------+------------+

可以看到结果中已经顺利将一个社区的成员通过一个相同的component标识出来,成功解决需求。

作为数据从业者,工作越来越离不开Spark,而无论你使用Python、Scala或Java编程语言,实际上都可以调用Spark实现大数据分析的高效操作。

参考资料

[1]

《Spark实战(第2版)》: http://product.dangdang.com/29391936.html

[2]

PySpark求解连通图问题: https://blog.csdn.net/as604049322/article/details/123036398

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2022-07-09,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 快学Python 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • PySpark求解连通图问题
    • 参考资料
    相关产品与服务
    大数据
    全栈大数据产品,面向海量数据场景,帮助您 “智理无数,心中有数”!
    领券
    问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档