文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

打破二八法则!每个数据科学家都得会一点SparkMagic

2024-12-11 21:01

关注

商业数据科学家80%的时间都花在查找、清洗和准备数据上,这是数据科学家工作中效率最低也是最可怕的部分。互联网为如何打破数据科学的80/20定律提供了许多的意见,但却收效甚微。

其实,数据科学家生产率低下的主要原因在于数据准备工作的双重性:

大数据大多是非结构化的,常常存储在具有企业管理和安全限制的生产环境中。快速访问数据需要昂贵的分布式系统,这些系统由IT集中管理,必须与其他数据科学家和分析师共享。

Spark是用于分布式数据湖中处理数据的行业黄金标准。但是,要以经济高效的方式使用Spark集群,甚至允许多租户,就很难满足单个需求和依赖关系。分布式数据基础架构的行业趋势是临时集群,这使得数据科学家更加难以部署和管理他们的Jupyter Notebook环境。

 


图源:CC BY-SA 3.0

很多数据科学家都在高规格笔记本电脑上进行本地工作,可以更加轻松地安装和持久保存Jupyter Notebook环境。那么这些数据科学家们如何将其本地开发环境与生产数据湖中的数据联系起来?通常,他们使用Spark实现了csv文件,并从云存储控制台下载了它们。

从云存储控制台手动下载csv文件既不高效,也没有特别强大的功能。如果能以终端用户友好且透明的方式无缝地将本地的Jupyter Notebook与远程集群连接起来,岂不是更好吗?

学好SparkMagic,打破数据科学二八法则的时间到了!

适用于Jupyter NoteBook的SparkMagic

Sparkmagic是一个通过Livy REST API与Jupyter Notebook中的远程Spark群集进行交互工作的项目。它提供了一组Jupyter Notebook单元魔术和内核,可将Jupyter变成用于远程集群的集成Spark环境。

 


合理使用和公共领域图标和svg | 图源:MIT

SparkMagic能够:

可以使用以下Dockerfile来构建具有SparkMagic支持的Jupyter Notebook:

  1. FROM jupyter/all-spark-notebook:7a0c7325e470USER$NB_USER 
  2. RUN pip install --upgrade pip 
  3. RUN pip install --upgrade --ignore-installed setuptools 
  4. RUN pip install pandas --upgrade 
  5. RUN pip install sparkmagic 
  6. RUN mkdir /home/$NB_USER/.sparkmagic 
  7. RUN wget https://raw.githubusercontent.com/jupyter-incubator/sparkmagic/master/sparkmagic/example_config.json 
  8. RUN mv example_config.json /home/$NB_USER/.sparkmagic/config.json 
  9. RUN sed -i 's/localhost:8998/host.docker.internal:9999/g'/home/$NB_USER/.sparkmagic/config.json 
  10. RUN jupyter nbextension enable --py --sys-prefix widgetsnbextension 
  11. RUN jupyter-kernelspec install --user --name SparkMagic $(pip show sparkmagic |grep Location | cut -d" " -f2)/sparkmagic/kernels/sparkkernel 
  12. RUN jupyter-kernelspec install --user --name PySparkMagic $(pip show sparkmagic| grep Location | cut -d" " -f2)/sparkmagic/kernels/pysparkkernel 
  13. RUN jupyter serverextension enable --py sparkmagic 
  14. USER root 
  15. RUN chown $NB_USER /home/$NB_USER/.sparkmagic/config.json 
  16. CMD ["start-notebook.sh","--NotebookApp.iopub_data_rate_limit=1000000000"
  17. USER $NB_USER 

生成图像并用以下代码标记:

  1. docker build -t sparkmagic 

并在Spark Magic支持下启动本地Jupyter容器,以安装当前工作目录:

  1. docker run -ti --name\"${PWD##*/}-pyspark\" -p 8888:8888 --rm -m 4GB --mounttype=bind,source=\"${PWD}\",target=/home/jovyan/work sparkmagic 

为了能够连接到远程Spark集群上的Livy REST API,必须在本地计算机上使用ssh端口转发。获取你的远程集群的IP地址并运行:

  1. ssh -L 0.0.0.0:9999:localhost:8998REMOTE_CLUSTER_IP 

首先,使用启用了SparkMagic的PySpark内核创建一个新的Notebook,如下所示:

 

在启用了SparkMagic的Notebook中,你可以使用一系列单元魔术来在本地笔记本电脑以及作为集成环境的远程Spark集群中使用。%% help魔术输出所有可用的魔术命令:

 

可以使用%%configuremagic配置远程Spark应用程序:

 

如图所示,SparkMagic自动启动了一个远程PySpark会话,并提供了一些有用的链接以连接到Spark UI和日志。

Notebook集成了2种环境:

首先将以下code cell远程导入SparkSql数据类型;其次,它使用远程SparkSession将Enigma-JHU Covid-19数据集加载到我们的远程Spark集群中。可以在Notebook中看到remote .show()命令的输出:

 

但这就是魔术开始的地方。可以将数据框注册为Hive表,并使用%%sql魔术对远程群集上的数据执行Hive查询,并在本地Notebook中自动显示结果。这不是什么高难度的事,但对于数据分析人员和数据科学项目早期的快速数据探索而言,这非常方便。

 

SparkMagic真正有用之处在于实现本地Notebook和远程群集之间无缝传递数据。数据科学家的日常挑战是在与临时集群合作以与其公司的数据湖进行交互的同时,创建并保持其Python环境。

在下例中,我们可以看到如何将seaborn导入为本地库,并使用它来绘制covid_data pandas数据框。

这些数据从何而来?它是由远程Spark集群创建并发送的。神奇的%%spark-o允许我们定义一个远程变量,以在单元执行时转移到本地笔记本上下文。我们的变量covid_data是一个远程集群上的SparkSQL Data Frame,和一个本地JupyterNotebook中的PandasDataFrame。

 

使用Pandas在Jupyter Notebook中聚合远程集群中的大数据以在本地工作的能力对于数据探索非常有帮助。例如,使用Spark将直方图的数据预汇总为bins,以使用预汇总的计数和简单的条形图在Jupyter中绘制直方图。

另一个有用的功能是能够使用魔术%%spark-o covid_data -m sample -r 0.5来采样远程Spark DataFrame。集成环境还允许你使用神奇的%%send_to_spark将本地数据发送到远程Spark集群。

 

[[330301]]
图源:pexels

PandasDataFrames和字符串支持的两种数据类型。要将其他更多或更复杂的东西(例如,经过训练的scikit模型用于评分)发送到远程Spark集群,可以使用序列化创建用于传输的字符串表示形式:

  1. import pickle 
  2. import gzip 
  3. import base64serialised_model = base64.b64encode( 
  4.     gzip.compress( 
  5.        pickle.dumps(trained_scikit_model) 
  6.     ) 
  7. ).decode() 

但正如你所见,这种短暂的PySpark集群模式有一大诟病:使用Python软件包引导EMR集群,且这个问题不会随着部署生产工作负载而消失。

快将自己的生产力从数据准备的低效率中拯救出来吧,用80%中节省出来的时间去创造更多价值。

来源:今日头条内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯