日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > windows >内容正文

windows

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

發(fā)布時間:2024/1/21 windows 43 coder
生活随笔 收集整理的這篇文章主要介紹了 【新手友好】用Pyspark和GraphX解析复杂网络数据 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

從零開始

在本文中,我們將詳細介紹如何在Python / pyspark環(huán)境中使用graphx進行圖計算。GraphX是Spark提供的圖計算API,它提供了一套強大的工具,用于處理和分析大規(guī)模的圖數據。通過結合Python / pyspark和graphx,您可以輕松地進行圖分析和處理。

為了方便那些剛入門的新手,包括我自己在內,我們將從零開始逐步講解。

安裝Spark和pyspark

如果你只是想單獨運行一下pyspark的演示示例,那么只需要擁有Python環(huán)境就可以了。你可以前往官方網站的快速開始頁面查看詳細的指南: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)以獲取適用于您操作系統(tǒng)的最新版本,并進行下載。如果您覺得下載速度較慢,您還可以選擇使用國內阿里鏡像進行下載。為了方便起見,我已經幫您找到了相應的鏡像地址。

國內阿里鏡像: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壓縮包即可

配置環(huán)境變量

在安裝Spark之前,請務必記住需要Java環(huán)境。請確保提前配置好JAVA_HOME環(huán)境變量,這樣才能正常運行Spark。

在windows上安裝Java和Apache Spark后,設置SPARK_HOME、HADOOP_HOME和PATH環(huán)境變量。如果你知道如何在windows上設置環(huán)境變量,請?zhí)砑右韵聝热荩?/p>

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環(huán)境下模擬類似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能夠正確地使用它來執(zhí)行Windows特有的操作。

Apache Spark shell

spark-shell是Apache Spark發(fā)行版附帶的命令行界面(CLI)工具,它可以通過直接雙擊或使用命令行窗口在Windows操作系統(tǒng)上運行。此外,Spark還提供了一個Web UI界面,用于在Windows上進行可視化監(jiān)控和管理。

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

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

GraphFrames

在前面的步驟中,我們已經完成了所有基礎設施(環(huán)境變量)的配置。現在,我們需要進行一些配置來使Python腳本能夠運行graphx。

要使用Python / pyspark運行graphx,你需要進行一些配置。接下來的示例將展示如何配置Python腳本來運行graphx。

GraphFrames的安裝

如需獲得更多關于GraphFrames的信息和快速入門指南,請訪問官方網站:https://graphframes.github.io/graphframes/docs/_site/quick-start.html。

你也可以使用以下命令來安裝GraphFrames。

pip install graphframes

在繼續(xù)操作之前,請務必將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)

為了創(chuàng)建圖數據結構并進行分析,可以簡化流程,直接讀取相關文件并進行處理。

# 計算每個節(jié)點的入度和出度
in_degrees = graph.inDegrees
out_degrees = graph.outDegrees

# 打印節(jié)點的入度和出度
in_degrees.show()
out_degrees.show()

查找具有最大入度和出度的節(jié)點:

# 找到具有最大入度的節(jié)點
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")

# 找到具有最大出度的節(jié)點
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環(huán)境中使用graphx進行圖計算。通過結合Python / pyspark和graphx,可以輕松進行圖分析和處理。首先需要安裝Spark和pyspark包,然后配置環(huán)境變量。接著介紹了GraphFrames的安裝和使用,包括創(chuàng)建圖數據結構、計算節(jié)點的入度和出度,以及查找具有最大入度和出度的節(jié)點。最后,希望本文章對于新手來說有一些幫助~

總結

以上是生活随笔為你收集整理的【新手友好】用Pyspark和GraphX解析复杂网络数据的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。