您好,登錄后才能下訂單哦!
本篇內(nèi)容介紹了“SparkMagic能做什么”的有關(guān)知識(shí),在實(shí)際案例的操作過程中,不少人都會(huì)遇到這樣的困境,接下來就讓小編帶領(lǐng)大家學(xué)習(xí)一下如何處理這些情況吧!希望大家仔細(xì)閱讀,能夠?qū)W有所成!
適用于Jupyter NoteBook的SparkMagic
Sparkmagic是一個(gè)通過Livy REST API與Jupyter Notebook中的遠(yuǎn)程Spark群集進(jìn)行交互工作的項(xiàng)目。它提供了一組Jupyter Notebook單元魔術(shù)和內(nèi)核,可將Jupyter變成用于遠(yuǎn)程集群的集成Spark環(huán)境。
SparkMagic能夠:
以多種語言運(yùn)行Spark代碼
提供可視化的SQL查詢
輕松訪問Spark應(yīng)用程序日志和信息
針對(duì)任何遠(yuǎn)程Spark集群自動(dòng)創(chuàng)建帶有SparkContext和HiveContext的SparkSession
將Spark查詢的輸出捕獲為本地Pandas數(shù)據(jù)框架,以輕松與其他Python庫進(jìn)行交互(例如matplotlib)
發(fā)送本地文件或Pandas數(shù)據(jù)幀到遠(yuǎn)程集群(例如,將經(jīng)過預(yù)訓(xùn)練的本地ML模型直接發(fā)送到Spark集群)
可以使用以下Dockerfile來構(gòu)建具有SparkMagic支持的Jupyter Notebook:
FROM jupyter/all-spark-notebook:7a0c7325e470USER$NB_USER RUN pip install --upgrade pip RUN pip install --upgrade --ignore-installed setuptools RUN pip install pandas --upgrade RUN pip install sparkmagic RUN mkdir /home/$NB_USER/.sparkmagic RUN wget https://raw.githubusercontent.com/jupyter-incubator/sparkmagic/master/sparkmagic/example_config.json RUN mv example_config.json /home/$NB_USER/.sparkmagic/config.json RUN sed -i 's/localhost:8998/host.docker.internal:9999/g'/home/$NB_USER/.sparkmagic/config.json RUN jupyter nbextension enable --py --sys-prefix widgetsnbextension RUN jupyter-kernelspec install --user --name SparkMagic $(pip show sparkmagic |grep Location | cut -d" " -f2)/sparkmagic/kernels/sparkkernel RUN jupyter-kernelspec install --user --name PySparkMagic $(pip show sparkmagic| grep Location | cut -d" " -f2)/sparkmagic/kernels/pysparkkernel RUN jupyter serverextension enable --py sparkmagic USER root RUN chown $NB_USER /home/$NB_USER/.sparkmagic/config.json CMD ["start-notebook.sh","--NotebookApp.iopub_data_rate_limit=1000000000"] USER $NB_USER
生成圖像并用以下代碼標(biāo)記:
docker build -t sparkmagic
并在Spark Magic支持下啟動(dòng)本地Jupyter容器,以安裝當(dāng)前工作目錄:
docker run -ti --name\"${PWD##*/}-pyspark\" -p 8888:8888 --rm -m 4GB --mounttype=bind,source=\"${PWD}\",target=/home/jovyan/work sparkmagic
為了能夠連接到遠(yuǎn)程Spark集群上的Livy REST API,必須在本地計(jì)算機(jī)上使用ssh端口轉(zhuǎn)發(fā)。獲取你的遠(yuǎn)程集群的IP地址并運(yùn)行:
ssh -L 0.0.0.0:9999:localhost:8998REMOTE_CLUSTER_IP
首先,使用啟用了SparkMagic的PySpark內(nèi)核創(chuàng)建一個(gè)新的Notebook,如下所示:
在啟用了SparkMagic的Notebook中,你可以使用一系列單元魔術(shù)來在本地筆記本電腦以及作為集成環(huán)境的遠(yuǎn)程Spark集群中使用。%% help魔術(shù)輸出所有可用的魔術(shù)命令:
可以使用%%configuremagic配置遠(yuǎn)程Spark應(yīng)用程序:
如圖所示,SparkMagic自動(dòng)啟動(dòng)了一個(gè)遠(yuǎn)程PySpark會(huì)話,并提供了一些有用的鏈接以連接到Spark UI和日志。
Notebook集成了2種環(huán)境:
%%local,可在筆記本電腦和jupyter docker映像提供的anaconda環(huán)境中本地執(zhí)行單元
%%spark,通過遠(yuǎn)程Spark集群上的PySpark REPL,再通過Livy REST API遠(yuǎn)程執(zhí)行單元
首先將以下code cell遠(yuǎn)程導(dǎo)入SparkSql數(shù)據(jù)類型;其次,它使用遠(yuǎn)程SparkSession將Enigma-JHU Covid-19數(shù)據(jù)集加載到我們的遠(yuǎn)程Spark集群中??梢栽贜otebook中看到remote .show()命令的輸出:
但這就是魔術(shù)開始的地方??梢詫?shù)據(jù)框注冊(cè)為Hive表,并使用%%sql魔術(shù)對(duì)遠(yuǎn)程群集上的數(shù)據(jù)執(zhí)行Hive查詢,并在本地Notebook中自動(dòng)顯示結(jié)果。這不是什么高難度的事,但對(duì)于數(shù)據(jù)分析人員和數(shù)據(jù)科學(xué)項(xiàng)目早期的快速數(shù)據(jù)探索而言,這非常方便。
SparkMagic真正有用之處在于實(shí)現(xiàn)本地Notebook和遠(yuǎn)程群集之間無縫傳遞數(shù)據(jù)。數(shù)據(jù)科學(xué)家的日常挑戰(zhàn)是在與臨時(shí)集群合作以與其公司的數(shù)據(jù)湖進(jìn)行交互的同時(shí),創(chuàng)建并保持其Python環(huán)境。
在下例中,我們可以看到如何將seaborn導(dǎo)入為本地庫,并使用它來繪制covid_data pandas數(shù)據(jù)框。
這些數(shù)據(jù)從何而來?它是由遠(yuǎn)程Spark集群創(chuàng)建并發(fā)送的。神奇的%%spark-o允許我們定義一個(gè)遠(yuǎn)程變量,以在單元執(zhí)行時(shí)轉(zhuǎn)移到本地筆記本上下文。我們的變量covid_data是一個(gè)遠(yuǎn)程集群上的SparkSQL Data Frame,和一個(gè)本地JupyterNotebook中的PandasDataFrame。
使用Pandas在Jupyter Notebook中聚合遠(yuǎn)程集群中的大數(shù)據(jù)以在本地工作的能力對(duì)于數(shù)據(jù)探索非常有幫助。例如,使用Spark將直方圖的數(shù)據(jù)預(yù)匯總為bins,以使用預(yù)匯總的計(jì)數(shù)和簡單的條形圖在Jupyter中繪制直方圖。
另一個(gè)有用的功能是能夠使用魔術(shù)%%spark-o covid_data -m sample -r 0.5來采樣遠(yuǎn)程Spark DataFrame。集成環(huán)境還允許你使用神奇的%%send_to_spark將本地?cái)?shù)據(jù)發(fā)送到遠(yuǎn)程Spark集群。
PandasDataFrames和字符串支持的兩種數(shù)據(jù)類型。要將其他更多或更復(fù)雜的東西(例如,經(jīng)過訓(xùn)練的scikit模型用于評(píng)分)發(fā)送到遠(yuǎn)程Spark集群,可以使用序列化創(chuàng)建用于傳輸?shù)淖址硎拘问剑?/p>
import pickle import gzip import base64serialised_model = base64.b64encode( gzip.compress( pickle.dumps(trained_scikit_model) ) ).decode()
但正如你所見,這種短暫的PySpark集群模式有一大詬?。菏褂肞ython軟件包引導(dǎo)EMR集群,且這個(gè)問題不會(huì)隨著部署生產(chǎn)工作負(fù)載而消失。
“SparkMagic能做什么”的內(nèi)容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業(yè)相關(guān)的知識(shí)可以關(guān)注億速云網(wǎng)站,小編將為大家輸出更多高質(zhì)量的實(shí)用文章!
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請(qǐng)聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。