GraphFrames基本介紹
? ? ? ?GraphFrames,該類庫是構(gòu)建在DataFrame之上,它既能利用DataFrame良好的擴展性和強大的性能,同時也為Scala、Java和Python提供了統(tǒng)一的圖處理API。GraphX基于RDD API,不支持Python API; 但GraphFrame基于DataFrame,并且支持Python API。
? ? ? ?與Apache Spark的GraphX類似,GraphFrames支持多種圖處理功能,但得益于DataFrame因此GraphFrames與GraphX庫相比有著下面幾方面的優(yōu)勢:
1、統(tǒng)一的 API: 為Python、Java和Scala三種語言提供了統(tǒng)一的接口,這是Python和Java首次能夠使用GraphX的全部算法。
2、強大的查詢功能:GraphFrames使得用戶可以構(gòu)建與Spark SQL以及DataFrame類似的查詢語句。
3、圖的存儲和讀?。篏raphFrames與DataFrame的數(shù)據(jù)源完全兼容,支持以Parquet、JSON以及CSV等格式完成圖的存儲或讀取。
在GraphFrames中圖的頂點(Vertex)和邊(Edge)都是以DataFrame形式存儲的,所以一個圖的所有信息都能夠完整保存。
GraphFrames與GraphX的集成
? ? ? ?GraphFrames可以實現(xiàn)與GraphX的完美集成。兩者之間相互轉(zhuǎn)換時不會丟失任何數(shù)據(jù)。
val graph = Graph(...)
val graphFrame =GraphFrame.fromGraphX(graph)
一、安裝anaconda3
1.1、選擇版本
anaconda3-5.2.0
參考:https://blog.csdn.net/yuejisuo1948/article/details/81043823
1.2、獲取資源
wget https://mirrors.tuna.tsinghua.edu.cn/anaconda/archive/Anaconda3-5.2.0-Linux-x86_64.sh
sh?Anaconda3-5.2.0-Linux-x86_64.sh
export PATH=/data/install/anaconda3/bin:$PATH
參考:https://mirrors.tuna.tsinghua.edu.cn/anaconda/archive/
二、安裝graphframes
2.1、下載graphframes包
官方下載地址:https://spark-packages.org/package/graphframes/graphframes,下載zip格式,上傳至服務器。

2.2、在服務器上解壓1中的壓縮包,unzip xx.zip
將/python/graphframes文件夾拷貝到anaconda3/lib/python/site-package/路徑下。
unzip?graphframes-0.6.0-spark2.2-s_2.11.zip
cp -rf ./graphframes-0.6.0-spark2.2-s_2.11/python/graphframes ./anaconda3/lib/python3.6/site-packages
三、安裝pyspark?
版本需要和spark版本匹配,spark2.2.0 <=> pyspark2.1.2
conda install pyspark==2.2.1
四、安裝完畢
示例代碼:


上圖為python交互運行GraphFrameDemo代碼案例;
python腳本直接執(zhí)行:
cd? /data/install/jupyter_namespace/public/
/data/install/anaconda3/bin/python GraphFrameDemo.py

spark-submit提交運行
spark-submit \
--master yarn \
--deploy-mode client \
--num-executors 6 \
--driver-memory 1g \
--executor-memory 1g \
--executor-cores 1 \
GraphFrameDemo.py

五、安裝啟動簡易juypter
啟動anaconda3-5.2.0自帶jupyter,linux服務器配置jupyter,然后遠程使用jupyter。
5.1、 進入環(huán)境ipython, 在ipython環(huán)境下輸入:
from notebook.auth import passwd
passwd()
# 輸入方便你記的密碼,連續(xù)輸;兩次..輸完密碼后,會輸出一個字符串,形如: ’sha1:9e7a5c5e0a29:8cbdvsv2344d141c92beab1c5bc6e9avsdvdsvsv’
# 將其保存下來, 完成以上操作后,通過exit()推出ipython環(huán)境
5.2、進入到用戶根目錄:
cd?/data/install/jupyter_namespace/public/
/data/install/anaconda3/bin/jupyter notebook --generate-config
#(命令會產(chǎn)生文件:/data/install/anaconda3/jupyter_namespace/public/jupyter_notebook_config.py)
5.3、編輯配置文件,編輯此文件,寫入
c.NotebookApp.ip = '*' # 允許訪問此服務器的 IP,星號表示任意 IP
c.NotebookApp.password = u'sha1:81c56f4992cc:c39ab21d485bb4a58f77b77eec8c022d283de286' # 之前生成的密碼 hash 字串
c.NotebookApp.open_browser = False # 運行時不打開本機瀏覽器
c.NotebookApp.port = 8881 # 使用的端口,隨意設置
c.NotebookApp.enable_mathjax = True # 啟用 MathJax
c.NotebookApp.notebook_dir = '/data/install/jupyter_namespace/public'
5.4、啟動服務
普通用戶啟動:jupyter notebook?
超級用戶啟動:jupyter notebook --allow-root
指定配置文件啟動:
nohup /data/install/anaconda3/bin/jupyter notebook --allow-root --config jupyter_notebook_config_public.py &
5.5、遠程登錄使用GraphFrames

注意事項:
保證集群各機器,spark-python版本一致
export PYSPARK_DRIVER_PYTHON=/data/install/anaconda3/bin/python3
export PYSPARK_PYTHON=/data/install/anaconda3/bin/python3