Jupyter notebook运行Spark+Scala教程


Posted in Python onApril 10, 2020

今天在intellij调试spark的时候感觉每次有新的一段代码,都要重新跑一遍,如果用spark-shell,感觉也不是特别方便,如果能像python那样,使用jupyter notebook进行编程就很方便了,同时也适合代码展示,网上查了一下,试了一下,碰到了很多坑,有些是旧的版本,还有些是版本不同导致错误,这里就记录下来安装的过程。

1.运行环境

硬件:Mac

事先装好:Jupyter notebook,spark2.1.0,scala 2.11.8 (这个版本很重要,关系到后面的安装)

2.安装

2.1.scala kernel

从github下载

git clone https://github.com/jupyter-scala/jupyter-scala.git

进入下载的jupyter-scala目录下,运行

bash jupyter-scala

然后查看

jupyter kernelspec list

Jupyter notebook运行Spark+Scala教程

表示scala已经嵌入到jupyter notebook

2.2.spark kernel

这个也比较好装,但是要注意版本问题,我们用的是toree来装的,首先要安装toree

网上的教程通常直接

pip install toree

但是这个下载的是0.1.0版本,该版本的话问题是,后面装spark kernel后,在jupyter运行spark的时候,默认选的是scala2.10.4版本,会有以下的错误

[I 03:15:16.677 NotebookApp] Kernel started: 94a63354-d294-4de7-a12c-2e05905e0c45
Starting Spark Kernel with SPARK_HOME=/usr/local/spark
16/11/20 03:15:18 [INFO] o.a.t.Main$$anon$1 - Kernel version: 0.1.0.dev8-incubating-SNAPSHOT
16/11/20 03:15:18 [INFO] o.a.t.Main$$anon$1 - Scala version: Some(2.10.4)
16/11/20 03:15:18 [INFO] o.a.t.Main$$anon$1 - ZeroMQ (JeroMQ) version: 3.2.2
16/11/20 03:15:18 [INFO] o.a.t.Main$$anon$1 - Initializing internal actor system
Exception in thread "main" java.lang.NoSuchMethodError: scala.collection.immutable.HashSet$.empty()Lscala/collection/immutable/HashSet;
    at akka.actor.ActorCell$.<init>(ActorCell.scala:336)
    at akka.actor.ActorCell$.<clinit>(ActorCell.scala)
    at akka.actor.RootActorPath.$div(ActorPath.scala:185)
    at akka.actor.LocalActorRefProvider.<init>(ActorRefProvider.scala:465)
    at akka.actor.LocalActorRefProvider.<init>(ActorRefProvider.scala:453)
    at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
    at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
    at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
    at java.lang.reflect.Constructor.newInstance(Constructor.java:423)
    at akka.actor.ReflectiveDynamicAccess$$anonfun$createInstanceFor$2.apply(DynamicAccess.scala:78)
    at scala.util.Try$.apply(Try.scala:192)
    at akka.actor.ReflectiveDynamicAccess.createInstanceFor(DynamicAccess.scala:73)
    at akka.actor.ReflectiveDynamicAccess$$anonfun$createInstanceFor$3.apply(DynamicAccess.scala:84)
    at akka.actor.ReflectiveDynamicAccess$$anonfun$createInstanceFor$3.apply(DynamicAccess.scala:84)
    at scala.util.Success.flatMap(Try.scala:231)
    at akka.actor.ReflectiveDynamicAccess.createInstanceFor(DynamicAccess.scala:84)
    at akka.actor.ActorSystemImpl.liftedTree1$1(ActorSystem.scala:585)
    at akka.actor.ActorSystemImpl.<init>(ActorSystem.scala:578)
    at akka.actor.ActorSystem$.apply(ActorSystem.scala:142)
    at akka.actor.ActorSystem$.apply(ActorSystem.scala:109)
    at org.apache.toree.boot.layer.StandardBareInitialization$class.createActorSystem(BareInitialization.scala:71)
    at org.apache.toree.Main$$anon$1.createActorSystem(Main.scala:35)
    at org.apache.toree.boot.layer.StandardBareInitialization$class.initializeBare(BareInitialization.scala:60)
    at org.apache.toree.Main$$anon$1.initializeBare(Main.scala:35)
    at org.apache.toree.boot.KernelBootstrap.initialize(KernelBootstrap.scala:72)
    at org.apache.toree.Main$delayedInit$body.apply(Main.scala:40)
    at scala.Function0$class.apply$mcV$sp(Function0.scala:34)
    at scala.runtime.AbstractFunction0.apply$mcV$sp(AbstractFunction0.scala:12)
    at scala.App$$anonfun$main$1.apply(App.scala:76)
    at scala.App$$anonfun$main$1.apply(App.scala:76)
    at scala.collection.immutable.List.foreach(List.scala:381)
    at scala.collection.generic.TraversableForwarder$class.foreach(TraversableForwarder.scala:35)
    at scala.App$class.main(App.scala:76)
    at org.apache.toree.Main$.main(Main.scala:24)
    at org.apache.toree.Main.main(Main.scala)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:498)
    at org.apache.spark.deploy.SparkSubmit$.org$apache$spark$deploy$SparkSubmit$$runMain(SparkSubmit.scala:736)
    at org.apache.spark.deploy.SparkSubmit$.doRunMain$1(SparkSubmit.scala:185)
    at org.apache.spark.deploy.SparkSubmit$.submit(SparkSubmit.scala:210)
    at org.apache.spark.deploy.SparkSubmit$.main(SparkSubmit.scala:124)
    at org.apache.spark.deploy.SparkSubmit.main(SparkSubmit.scala)
[W 03:15:26.738 NotebookApp] Timeout waiting for kernel_info reply from 94a63354-d294-4de7-a12c-2e05905e0c45

这个错误太可怕了,就是版本不对,因为spark2.1.0对应的是scala2.11版本的

所以要用下面的方式下载0.2.0版本

pip install https://dist.apache.org/repos/dist/dev/incubator/toree/0.2.0/snapshots/dev1/toree-pip/toree-0.2.0.dev1.tar.gz

后面就可以安装spark kernel了

jupyter toree install --interpreters=Scala --spark_home=/usr/local/Cellar/apache-spark/2.1.0/libexec --user --kernel_name=apache_toree --interpreters=PySpark,SparkR,Scala,SQL

其中spark_home指的是你的spark的安装目录,记住这个安装目录必须到spark中有python之前,比如我的spark中的python(spark中的python文件夹,不是我们自己装的那个)在 /usr/local/Cellar/apache-spark/2.1.0/libexec

查看结果

jupyter kernelspec list

Jupyter notebook运行Spark+Scala教程

安装成功

3.打开jupyter notebook查看效果

Jupyter notebook运行Spark+Scala教程

有这么多选项,可以快乐的用jupyter notebook进行spark了

以上这篇Jupyter notebook运行Spark+Scala教程就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
python实现linux下使用xcopy的方法
Jun 28 Python
Python实现字符串格式化输出的方法详解
Sep 20 Python
Python编程pygame模块实现移动的小车示例代码
Jan 03 Python
Python实现PS图像调整颜色梯度效果示例
Jan 25 Python
Python实现的当前时间多加一天、一小时、一分钟操作示例
May 21 Python
解决PyCharm同目录下导入模块会报错的问题
Oct 13 Python
关于Django ForeignKey 反向查询中filter和_set的效率对比详解
Dec 15 Python
spark dataframe 将一列展开,把该列所有值都变成新列的方法
Jan 29 Python
Django实现学员管理系统
Feb 26 Python
Python使用统计函数绘制简单图形实例代码
May 15 Python
python 抓包保存为pcap文件并解析的实例
Jul 23 Python
给numpy.array增加维度的超简单方法
Jun 02 Python
Python HTMLTestRunner可视化报告实现过程解析
Apr 10 #Python
jupyter notebook清除输出方式
Apr 10 #Python
解决Python在导入文件时的FileNotFoundError问题
Apr 10 #Python
jupyter notebook参数化运行python方式
Apr 10 #Python
Python库skimage绘制二值图像代码实例
Apr 10 #Python
解决Jupyter因卸载重装导致的问题修复
Apr 10 #Python
解决jupyter notebook打不开无反应 浏览器未启动的问题
Apr 10 #Python
You might like
php字符串截取问题
2006/11/28 PHP
php部分常见问题总结
2008/03/27 PHP
thinkphp视图模型查询提示ERR: 1146:Table 'db.pr_order_view' doesn't exist的解决方法
2014/10/30 PHP
PHP不使用内置函数实现字符串转整型的方法示例
2017/07/03 PHP
jquery html动态生成select标签出问题的解决方法
2013/11/20 Javascript
jquery实现的图片点击滚动效果
2014/04/29 Javascript
Grunt入门教程(自动任务运行器)
2015/08/06 Javascript
深入浅析JavaScript系列(13):This? Yes,this!
2016/01/05 Javascript
实现高性能JavaScript之执行与加载
2016/01/30 Javascript
NodeJS的Promise的用法解析
2016/05/05 NodeJs
jQuery 获取跨域XML(RSS)数据的相关总结分析
2016/05/18 Javascript
JavaScript 闭包机制详解及实例代码
2016/10/10 Javascript
javaScript生成支持中文带logo的二维码(jquery.qrcode.js)
2017/01/03 Javascript
Vue.js基础知识小结
2017/01/13 Javascript
vue-cli启动本地服务局域网不能访问的原因分析
2018/01/22 Javascript
Vue2.x通用条件搜索组件的封装及应用详解
2019/05/28 Javascript
vue.js实现二级菜单效果
2019/10/19 Javascript
小程序角标的添加及绑定购物车数量进行实时更新的实现代码
2020/12/07 Javascript
深入理解Python中各种方法的运作原理
2015/06/15 Python
对pandas中apply函数的用法详解
2018/04/10 Python
Python中的TCP socket写法示例
2018/05/11 Python
实践Vim配置python开发环境
2018/07/02 Python
pygame游戏之旅 游戏中添加显示文字
2018/11/20 Python
Django Docker容器化部署之Django-Docker本地部署
2019/10/09 Python
Python日志logging模块功能与用法详解
2020/04/09 Python
给keras层命名,并提取中间层输出值,保存到文档的实例
2020/05/23 Python
HTML5注册表单的自动聚焦与占位文本示例代码
2013/07/19 HTML / CSS
Bravofly德国:预订廉价航班和酒店
2019/09/22 全球购物
艺术应用与设计专业个人的自我评价
2013/11/19 职场文书
汽车销售顾问求职自荐信
2014/01/01 职场文书
教师考核评语
2014/04/28 职场文书
复兴之路纪录片观后感
2015/06/02 职场文书
新闻稿件写作技巧
2015/07/18 职场文书
幼儿园教师暑期培训心得体会
2016/01/09 职场文书
超级实用的公文标题大全!
2019/07/19 职场文书
Python加密与解密模块hashlib与hmac
2022/06/05 Python