【新手友好】用Pyspark和GraphX解析複雜網路數據

来源:https://www.cnblogs.com/guoxiaoyu/p/17972877
-Advertisement-
Play Games

本文介紹瞭如何在Python / pyspark環境中使用graphx進行圖計算。通過結合Python / pyspark和graphx,可以輕鬆進行圖分析和處理。首先需要安裝Spark和pyspark包,然後配置環境變數。接著介紹了GraphFrames的安裝和使用,包括創建圖數據結構、計算節點的... ...


從零開始

在本文中,我們將詳細介紹如何在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

image

在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上進行可視化監控和管理。

image

請嘗試運行Apache Spark shell。當你成功運行後,你應該會看到一些內容輸出(請忽略最後可能出現的警告信息)。

image

在啟動Spark-shell時,它會自動創建一個Spark上下文的Web UI。您可以通過從瀏覽器中打開URL,訪問Spark Web UI來監控您的工作。

image

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

image

將下載好的jar包放入你的%SPARK_HOME%\jars即可。

image

接下來,我們可以開始正常地使用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"

最後大功告成:

image

網路流量分析

接下來,我們將探討一下是否能夠對網路流量進行分析。對於初學者來說,很難獲得一些有組織的日誌文件或數據集,所以我們可以自己製造一些虛擬數據,以便進行演示。

首先,讓我來詳細介紹一下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的安裝和使用,包括創建圖數據結構、計算節點的入度和出度,以及查找具有最大入度和出度的節點。最後,希望本文章對於新手來說有一些幫助~


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 一、前言 到這篇文章為止,關於.NET "溫故知新"系列的基礎知識就完結了,從這一系列的系統回顧和再學習,對於.NET core、ASP.NET CORE又有了一個新的認識。 不光是從使用,還包括這些知識點的原理,雖然深入原理談不上,但對於日常使用也夠了,我想的是知其然,知其所以然。 在實際開發過程 ...
  • 旋轉編碼器(rotary encoder)也稱為軸編碼器,是將旋轉的機械位移量轉換為電氣信號,對該信號進行處理後檢測位置速度等信號的感測器。檢測直線機械位移量的感測器稱為線性編碼器[1]。一般裝設在旋轉物體中垂直旋轉軸的一面。 ...
  • Ansible劇本--Playbook Ansible playbook劇本介紹 在ansible中,類似“腳本”的文件被稱作“劇本”,英文稱為playbook,用於配置、部署和管理被控節點 只需要把模塊按照順序編排在playbook劇本中,ansible就會按照劇本一步一步的執行,最終達到我們需要 ...
  • 1、準備材料 開發板(正點原子stm32f407探索者開發板V2.4) STM32CubeMX軟體(Version 6.10.0) 野火DAP模擬器 keil µVision5 IDE(MDK-Arm) ST-LINK/V2驅動 一臺示波器 邏輯分析儀nanoDLA 2、實驗目標 使用STM32Cu ...
  • Ansible命令格式和常用模塊介紹 Ansible命令格式介紹 Ansible命令格式 ansible [群組名] -m [模塊名] -a [參數] Ansible命令返回值的顏色表示 綠色:代表對遠程節點不進行相應修改,沒有發生改變,命令執行成功 黃色:代表對遠程節點進行了相應的修改,命令執行成 ...
  • 什麼是大數據 大數據(Big Data)是指在傳統數據處理方法難以處理的情況下,需要新的處理模式來具有更強的決策力、洞察發現力和過程優化能力的海量、高增長率和多樣化的信息資產。大數據的特征通常被概括為“4V”,即: Volume(容量):大數據的規模非常龐大,通常以 TB(太位元組)、PB(拍位元組)或 ...
  • 當前隨著企業內外部數據源的不斷擴展和積累,數據呈現出大規模、多樣化、質量參差不齊等顯著特征。如何有效激活這些結構複雜且類型多樣的數據資產,挖掘其深層價值,已成為眾多企業亟待解決的實際挑戰。 袋鼠雲數棧作為新一代一站式大數據基礎軟體,其核心優勢在於不僅提供了快速便捷、易於上手的底層數據開發模塊,更推出 ...
  • 簡介 CloudCanal 推出 跨互聯網安全數據同步 方案之後,有一些商業客戶落地,效果良好,不過客戶也反饋了一些改進和新需求,其中最大的一個需求即雙向同步防迴圈。 近期 CloudCanal 版本支持了這個特性,整體方案進一步升級,最大特點包括: 兩端資料庫完全不開放公網埠 兩端資料庫可雙向同 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...