【新手友好】用Pyspark和GraphX解析复杂网络数据

这篇具有很好参考价值的文章主要介绍了【新手友好】用Pyspark和GraphX解析复杂网络数据。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

从零开始

在本文中,我们将详细介绍如何在Python / pyspark环境中使用graphx进行图计算。GraphX是Spark提供的图计算API,它提供了一套强大的工具,用于处理和分析大规模的图数据。通过结合Python / pyspark和graphx,您可以轻松地进行图分析和处理。

为了方便那些刚入门的新手,包括我自己在内,我们将从零开始逐步讲解。

安装Spark和pyspark

如果你只是想单独运行一下pyspark的演示示例,那么只需要拥有Python环境就可以了。你可以前往官方网站的快速开始页面查看详细的指南:https://spark.apache.org/docs/latest/api/python/getting_started/quickstart_df.html

安装pyspark包

pip install pyspark

由于官方省略的步骤还是相当多的,我简单写了一下我的成功演示示例。

from pyspark.sql import SparkSession,Row
from datetime import datetime, date
import pandas as pd
import os
os.environ['PYSPARK_PYTHON'] = "%你的Python包路径%//python.exe"

spark = SparkSession.builder.getOrCreate()
df = spark.createDataFrame([
    Row(a=1, b=2., c='string1', d=date(2000, 1, 1), e=datetime(2000, 1, 1, 12, 0)),
    Row(a=2, b=3., c='string2', d=date(2000, 2, 1), e=datetime(2000, 1, 2, 12, 0)),
    Row(a=4, b=5., c='string3', d=date(2000, 3, 1), e=datetime(2000, 1, 3, 12, 0))
])
df.show()

然而,考虑到我们今天需要使用GraphX进行分析,因此我们仍然需要安装Spark。

安装Spark

请访问Spark官方网站(https://spark.apache.org/downloads.html)以获取适用于您操作系统的最新版本,并进行下载。如果您觉得下载速度较慢,您还可以选择使用国内阿里镜像进行下载。为了方便起见,我已经帮您找到了相应的镜像地址。

国内阿里镜像:https://mirrors.aliyun.com/apache/spark/spark-3.5.0/?spm=a2c6h.25603864.0.0.52d72104qIXCsH

请下载带有hadoop的版本:spark-3.5.0-bin-hadoop3.tgz。解压缩Spark压缩包即可

配置环境变量

在安装Spark之前,请务必记住需要Java环境。请确保提前配置好JAVA_HOME环境变量,这样才能正常运行Spark。

在windows上安装Java和Apache Spark后,设置SPARK_HOME、HADOOP_HOME和PATH环境变量。如果你知道如何在windows上设置环境变量,请添加以下内容:

SPARK_HOME  = C:\apps\opt\spark-3.5.0-bin-hadoop3
HADOOP_HOME = C:\apps\opt\spark-3.5.0-bin-hadoop3

【新手友好】用Pyspark和GraphX解析复杂网络数据

在Windows上使用winutils.exe的Spark

在Windows上运行Apache Spark时,确保你已经下载了适用于Spark版本的winutils.exe。winutils.exe是一个用于在Windows环境下模拟类似POSIX的文件访问操作的工具,它使得Spark能够在Windows上使用Windows特有的服务和运行shell命令。

你可以从以下链接下载适用于你所使用的Spark版本的winutils.exe:https://github.com/kontext-tech/winutils/tree/master/hadoop-3.3.0/bin

请确保将下载的winutils.exe文件放置在Spark安装目录的bin文件夹下,以便Spark能够正确地使用它来执行Windows特有的操作。

Apache Spark shell

spark-shell是Apache Spark发行版附带的命令行界面(CLI)工具,它可以通过直接双击或使用命令行窗口在Windows操作系统上运行。此外,Spark还提供了一个Web UI界面,用于在Windows上进行可视化监控和管理。

【新手友好】用Pyspark和GraphX解析复杂网络数据

请尝试运行Apache Spark shell。当你成功运行后,你应该会看到一些内容输出(请忽略最后可能出现的警告信息)。

【新手友好】用Pyspark和GraphX解析复杂网络数据

在启动Spark-shell时,它会自动创建一个Spark上下文的Web UI。您可以通过从浏览器中打开URL,访问Spark Web UI来监控您的工作。

【新手友好】用Pyspark和GraphX解析复杂网络数据

GraphFrames

在前面的步骤中,我们已经完成了所有基础设施(环境变量)的配置。现在,我们需要进行一些配置来使Python脚本能够运行graphx。

要使用Python / pyspark运行graphx,你需要进行一些配置。接下来的示例将展示如何配置Python脚本来运行graphx。

GraphFrames的安装

如需获得更多关于GraphFrames的信息和快速入门指南,请访问官方网站:https://graphframes.github.io/graphframes/docs/_site/quick-start.html。

你也可以使用以下命令来安装GraphFrames。

pip install graphframes

在继续操作之前,请务必将graphframes对应的jar包安装到spark的jars目录中,以避免在使用graphframes时出现以下错误:
java.lang.ClassNotFoundException: org.graphframes.GraphFramePythonAPI

【新手友好】用Pyspark和GraphX解析复杂网络数据

将下载好的jar包放入你的%SPARK_HOME%\jars即可。

【新手友好】用Pyspark和GraphX解析复杂网络数据

接下来,我们可以开始正常地使用graphx图计算框架了。现在,让我们简单地浏览一下一个示例demo。

from pyspark.sql.types import *
from pyspark.sql import SparkSession
from pyspark import SparkContext, SparkConf
import pandas as pd
from graphframes import GraphFrame

spark_conf = SparkConf().setAppName('Python_Spark_WordCount').setMaster('local[2]') 
sc = SparkContext(conf=spark_conf)
spark=SparkSession.builder.appName("graph").getOrCreate()
v = spark.createDataFrame([
  ("a", "Alice", 34),
  ("b", "Bob", 36),
  ("c", "Charlie", 30),
], ["id", "name", "age"])

# Create an Edge DataFrame with "src" and "dst" columns
e = spark.createDataFrame([
  ("a", "b", "friend"),
  ("b", "c", "follow"),
  ("c", "b", "follow"),
], ["src", "dst", "relationship"])
# Create a GraphFrame
g = GraphFrame(v, e)

# Query: Get in-degree of each vertex.
g.inDegrees.show()

# Query: Count the number of "follow" connections in the graph.
g.edges.filter("relationship = 'follow'").count()

# Run PageRank algorithm, and show results.
results = g.pageRank(resetProbability=0.01, maxIter=20)
results.vertices.select("id", "pagerank").show()

如果运行还是报错:org.apache.spark.SparkException: Python worker failed to connect back

import os
os.environ['PYSPARK_PYTHON'] = "%你自己的Python路径%//Python//python.exe"

最后大功告成:

【新手友好】用Pyspark和GraphX解析复杂网络数据

网络流量分析

接下来,我们将探讨一下是否能够对网络流量进行分析。对于初学者来说,很难获得一些有组织的日志文件或数据集,所以我们可以自己制造一些虚拟数据,以便进行演示。

首先,让我来详细介绍一下GraphFrame(v, e)的参数:

参数v:Class,这是一个保存顶点信息的DataFrame。DataFrame必须包含名为"id"的列,该列存储唯一的顶点ID。

参数e:Class,这是一个保存边缘信息的DataFrame。DataFrame必须包含两列,"src"和"dst",分别用于存储边的源顶点ID和目标顶点ID。

edges=sc.textFile(r'/Users/xiaoyu/edges')
edges=edges.map(lambda x:x.split('\t'))
edges_df=spark.createDataFrame(edges,['src','dst'])

nodes=sc.textFile(r'/Users/xiaoyu/nodes')
nodes=nodes.map(lambda x:[x]) 
nodes_df=spark.createDataFrame(nodes,['id'])
graph=GraphFrame(nodes_df, edges_df)

为了创建图数据结构并进行分析,可以简化流程,直接读取相关文件并进行处理。

# 计算每个节点的入度和出度
in_degrees = graph.inDegrees
out_degrees = graph.outDegrees

# 打印节点的入度和出度
in_degrees.show()
out_degrees.show()

查找具有最大入度和出度的节点:

# 找到具有最大入度的节点
max_in_degree = in_degrees.agg(F.max("inDegree")).head()[0]
node_with_max_in_degree = in_degrees.filter(in_degrees.inDegree == max_in_degree).select("id")

# 找到具有最大出度的节点
max_out_degree = out_degrees.agg(F.max("outDegree")).head()[0]
node_with_max_out_degree = out_degrees.filter(out_degrees.outDegree == max_out_degree).select("id")

# 打印结果
node_with_max_in_degree.show()
node_with_max_out_degree.show()

总结

本文介绍了如何在Python / pyspark环境中使用graphx进行图计算。通过结合Python / pyspark和graphx,可以轻松进行图分析和处理。首先需要安装Spark和pyspark包,然后配置环境变量。接着介绍了GraphFrames的安装和使用,包括创建图数据结构、计算节点的入度和出度,以及查找具有最大入度和出度的节点。最后,希望本文章对于新手来说有一些帮助~文章来源地址https://www.toymoban.com/news/detail-804235.html

到了这里,关于【新手友好】用Pyspark和GraphX解析复杂网络数据的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Github多个账号设置SSH 逐个问题击破 新手友好(Windows) (史上最全)

    在看了几十篇博文,经历了一天一夜的挣扎后,基本把能踩的坑都踩了个遍,终于能够用SSH进行Github多个账号的无缝切换,记录于此。话不多说,先来分享一波成功的喜悦: 如果你在Github多个账号设置SSH的过程中遇到了以下问题: No such file or directory Could not open a connection t

    2024年02月09日
    浏览(36)
  • 【图解数据结构】深度解析时间复杂度与空间复杂度的典型问题

    🌈个人主页: 聆风吟 🔥系列专栏: 图解数据结构、算法模板 🔖少年有梦不应止于心动,更要付诸行动。 上篇文章我们主要学习了: 算法的定义:算法是解决特定问题求解步骤的描述,在计算机中表现为指令的有限序列,并且每条指令表示一个或多个操作。 算法的特性:

    2024年01月20日
    浏览(50)
  • Java操作elasticSearch复杂查询以及解析数据以及索引保存数据

    说明:基于银行测试库的操作 es的银行测试库,看一个Kibana操作 然后用java检索解析这个数据 聚合搜索 address 中包含 mill 的所有人的年龄分布以及平均薪资 以下是分解思路实现步骤: #聚合搜索 address 中包含 mill 的所有人的年龄分布以及平均年龄 GET bank/_search { “query”:{ “

    2024年02月10日
    浏览(63)
  • pytorch进阶学习(六):如何对训练好的模型进行优化、验证并且对训练过程进行准确率、损失值等的可视化,新手友好超详细记录

    课程资源:  7、模型验证与训练过程可视化【小学生都会的Pytorch】【提供源码】_哔哩哔哩_bilibili 推荐与上一节笔记搭配食用~: pytorch进阶学习(五):神经网络迁移学习应用的保姆级详细介绍,如何将训练好的模型替换成自己所需模型_好喜欢吃红柚子的博客-CSDN博客 训练

    2023年04月17日
    浏览(47)
  • Java解析JSON复杂数据的第三种思路

    本文介绍了Java解析JSON复杂数据的第三种思路,通过改变思路,按照新的流程获取数据。文章详细解析了接口JSON数据,并提供了JSON转XML数据

    2024年01月25日
    浏览(64)
  • C/C++数据结构之时间复杂度和空间复杂度详细解析以及力扣刷题

    个人主页:点我进入主页 专栏分类:C语言初阶      C语言程序设计————KTV       C语言小游戏     C语言进阶 C语言刷题       数据结构初阶 欢迎大家点赞,评论,收藏。 一起努力,一起奔赴大厂。 目录  1.前言 2.算法的效率 2.1时间复杂度  2.1.1时间复杂度的定义

    2024年02月06日
    浏览(45)
  • 静态、友好、内在:解析C++中的这些特殊元素和对象复制的优化

    W...Y的主页 😊 代码仓库分享💕  🍔前言: 前面我们学习了C++中关于类与对象的许多知识点,今天我们继续学习类与对象,最后再总结一下类与对象中的一些内容,以及需要注意的细节。满满的干货,我们之间发车。 目录  static成员 静态成员变量特性 静态成员函数

    2024年02月05日
    浏览(34)
  • 数据结构英文习题解析-第一章 算法复杂度分析Algorithm Analysis

    前言:最近快到FDS考试了,po重刷了一下学校的题目,自己整理了一些解析orz 因为po在自己找解析和学习的过程中非常痛苦,所以在此共享一下我的题目和自己写的解题思路,欢迎各位指出错误~全章节预计会陆续更新,可在专栏查看~ HW1 1. The major task of algorithm analysis is to an

    2024年03月12日
    浏览(72)
  • LLM Data Pipelines: 解析大语言模型训练数据集处理的复杂流程

    编者按:在训练大语言模型的过程中,构建高质量的训练数据集是非常关键的一步,但关于构建大模型训练所需数据集的通用数据处理流程(Data pipelines)的相关资料极为稀少。 本文主要介绍了基于Common Crawl数据集的数据处理流程。首先,文章概述了Common Crawl的不同数据格式WAR

    2024年02月15日
    浏览(53)
  • 使用Python爬取GooglePlay并从复杂的自定义数据结构中实现解析

    【作者主页】: 吴秋霖 【作者介绍】:Python领域优质创作者、阿里云博客专家、华为云享专家。长期致力于Python与爬虫领域研究与开发工作! 【作者推荐】:对JS逆向感兴趣的朋友可以关注《爬虫JS逆向实战》,对分布式爬虫平台感兴趣的朋友可以关注《分布式爬虫平台搭建

    2024年02月04日
    浏览(47)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包