从零开始

在本文中,我们将详细介绍如何在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

在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上进行可视化监控和管理。

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

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

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

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

接下来,我们可以开始正常地使用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"

最后大功告成:

网络流量分析

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

首先,让我来详细介绍一下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的安装和使用,包括创建图数据结构、计算节点的入度和出度,以及查找具有最大入度和出度的节点。最后,希望本文章对于新手来说有一些帮助~

【新手友好】用Pyspark和GraphX解析复杂网络数据的更多相关文章

  1. C++ 的语言杂谈(一)--C++不是新手友好的

    C++的语言品味是独特的,喜欢的人特别喜欢,讨厌的人特别讨厌.虽然Bjane Stroustrup不断地宣称C++的发展方向是新手友好的,但实际上对新手来说,最重要的还是有强大方便的标准库可以使用(像 ...

  2. spark- PySparkSQL之PySpark解析Json集合数据

    PySparkSQL之PySpark解析Json集合数据 数据样本 12341234123412342|asefr-3423|[{"}] 正菜: #-*- coding:utf-8 –*- ...

  3. 062 Python必备库-从Web解析到网络空间

    目录 一.概述 二.Python库之网络爬虫 2.1 Requests 2.2 Scrapy 2.3 pyspider 三.Python库之Web信息提取 3.1 Beautiful Soup 3.2 ...

  4. android基础(五)网络数据解析方法

    在网络上传输数据时最常用的方法有两种:XML和JSON,下面就对这两种类型的数据解析进行讲解. 一.XML数据解析 在Android中,常见的XML解析器分别为SAX解析器.DOM解析器和PULL解析 ...

  5. ios的网络数据下载和json解析

    ios的网络数据下载和json解析 简介 在本文中,笔者将要给大家介绍如何使用nsurlconnection 从网上下载数据,以及解析json数据格式,以及如何显示数据和图片的异步下载显示. 涉及的知 ...

  6. 解析json格式数据

    实现目标 读取文件中的json格式数据,一行为一条json格式数据.进行解析封装成实体类. 通过google的Gson对象解析json格式数据 我现在解析的json格式数据为: {",&qu ...

  7. js读取解析JSON类型数据(转)

    谢谢博主,转自http://blog.csdn.net/beyond0851/article/details/9285771 一.什么是JSON? JSON(JavaScript Object Not ...

  8. NSXMLParser解析本地.xml数据(由于like7xiaoben写的太好了,我从她那里粘贴过来的)

    NSXMLParser解析简要说明 .是sax方法解析 .需要创建NSXMLParser实例 (alloc) 并创建解析器 (initWithData:) 为解析器定义委托 (setDelegate: ...

  9. 网络数据的XML解析

    网络应用中的数据解析,因为最近的应用,无论是Android的和ios平台的,一直用也是建议用的都是Json解析, xml解析都有点被遗忘了. 然后最近自己在做着玩一个ios的小应用,涉及网络数据的抓取 ...

  10. lwip:网络数据包读取和解析过程

    1. 程序的某处(poll or interrupt)在有数据可读时调用ethernetif_input,该函数依次调用以下函数: 1.1 low_level_input(),将网络数据读入内存: 1 ...

随机推荐

  1. 精通TypeScript:打造一个炫酷的天气预报插件

    前言 ​ 随着数字化和信息化的发展,数据大屏使用越来越广泛,我们不仅需要展示数据,更需要以一种更加美观的方式展示数据.这就必然需要使用到各种图表组件,比如柱状图.饼图.折线图等等.但是有一些效果不太适 ...

  2. drf实战和源码剖析----学习笔记1

    学自:bilibili武沛齐老师. 武老师讲课:清晰,连贯,实用,透彻,真乃名师! # 1. 什么是前后端分离 - 不分离,主要用于后台系统(CRUD)和用户量上的情况,开发起来代价小- 分离,面向用 ...

  3. C++ Qt开发:CheckBox多选框组件

    Qt 是一个跨平台C++图形界面开发库,利用Qt可以快速开发跨平台窗体应用程序,在Qt中我们可以通过拖拽的方式将不同组件放到指定的位置,实现图形化开发极大的方便了开发效率,本章将重点介绍CheckBo ...

  4. MySQL运维10-Mycat分库分表之一致性哈希分片

    一.一致性哈希分片 一致性哈希分片的实现思路和我们之前介绍的水平分表中的取模分片是类似的.只不过取模分片,采用的是利用主键和分片数进行取模运算,然后根据取模后的结果,将数据写入到不同的分片数据中.但是 ...

  5. NetSuite 开发日记 —— 估价单(Estimate)新建项目(Project)自动填入项目字段

    Background 用户在估价单(Estimate)点击「项目」字段旁边+按钮新建项目(Project),在项目的自定义字段中自动填入估价单ID 用户在项目记录存在切换自定义表格行为 Analysi ...

  6. apache+mysql+php环境安装及配置

    一.安装mysql 1.yum安装mysql # yum -y install mysql mysql-server 2.安装mariadb,用mariadb来启动数据库,systemctl star ...

  7. @Conditional+@Configuration有没有搞头?

    日拱一卒,功不唐捐. 在了解 @Conditional 之前先花 10 秒钟复习一下 @Configuration 这个注解. @Configuration 是干什么? 是配合 @Bean 注解来配置 ...

  8. libGDX游戏开发之Box2D碰撞(十五)

    libGDX游戏开发之Box2D(十四) libGDX系列,游戏开发有unity3D巴拉巴拉的,为啥还用java开发?因为我是Java程序员emm-国内用libgdx比较少,多数情况需要去官网和goo ...

  9. mybatis空格字符替换

    mybatis空格字符替换 <select id="user" resultType="java.util.Map" parameterType=&quo ...

  10. android Handler应用

    android在运行时改变ui需要在ui线程中修改才行,不然就会报错或者无法启动应用. 我们怎么可以做事不管呢? 既然不能在ui线程外的地方运行修改ui的代码,我们可以用Handler解决这个问题, ...