目录
文章目录
- 目录
- 前情提要
- 主体内容
- bug01.ModuleNotFoundError: No module named 'models'
- bug02.No suitable driver
- bug03.java.lang.ClassNotFoundException: org.sqlite.JDBC
- 参考资料
前情提要
机器学习的库和工具多种多样诸如tensorflow这样的神器,最近在做体系解决方案,由于众所周知的原因,很大一部分公司,在实际的场景中是把数据都汇集到 了hadoop体系中(特别是文本类型数据,包括结构化的和非结构化的(音视频提取特征后也是文本数据)),如何在hadoop中高效的进行各种机器学习任务的开发(分布式开发,当然tensorflow也支持分布式,但是与hadoop我暂时还不知道),第一个想到的当然就是spark ml,随着技术的发展,spark ml也可以使用一些python诸如的pandas库等,但是用起来,就是感觉怪怪的(原谅我用过前后台开发的一些全家桶的工具的原因),我就拼命的找啊找,终于在git上找到了snorkel(deepdive的升级版,暂且这样称呼)这个项目。
snorkel是个号称探索software2.0的开发工具,这是一个不错的全家桶,大家可以看看它主页推荐的各种paper,看看现在的行业领先的那批科学家在想啥,想干啥(snorkel的功能,如标签化,远程监督等,我就不讨论了和发散了,论文中都有)。
snorkel能集成几乎所有机器学习库和工具(包括tensorflow和spark(pyspark)),这样的全家桶,不就是目前我急需的么?二话不说,拿过来用,oh,shit!有错调错,没错吐槽,下面吧折磨我这几天的小bug拿来说说
主体内容
本文要调试的是snorkel项目中给出来的snark demo,也即snorkel混合调用spark,即使后面用不上snorkel,但是在构建自己的项目的时候,这个项目也是值得借鉴和直接使用的。
在调试snark的过程中有几个bug,折磨了我几天,现在列出解决的方法,用以帮助后来人。
我现在用的是snorkel的最新版也就是0.7beta版
snark的demo
我把内容拷贝下来如下:
bug01.ModuleNotFoundError: No module named ‘models’
解决方案:
找到 …/snorkel/snorkel/contrib/snark/annotations.py
修改红框内容如黄框所示,去掉黄框的注释
bug02.No suitable driver
解决方案:一行行,根据报错追踪,最后发现是在
…/snorkel/snorkel/contrib/snark/annotations.py中
解决方案:将红框的内容改为黄框的内容,并去掉注释(注意增加的内容)
bug03.java.lang.ClassNotFoundException: org.sqlite.JDBC
很遗憾,有bug02导致bug03,这个很容易看明白,spark中是没有对应jdbc的驱动的(如本例中的sqlite),参考资料中的第二篇文章告诉我们了,在jupter notebook中如何使用pyspark,这个问题看是很容易,不过怎么尝试都有问题,最后的解决办法
这里需要注意两点:
1.这个参数一定要在创建sparksession的前面引入,相当于在启动pyspark的时候传入参数,后面引入不起作用(pyspark已启动,你再传启动参数,当然无效)
2.不要想当然的把青色框中的最后的pyspark-shell参数改为pyspark,因为,pyspark的脚本就是启动pyspark-shell,有如下截图证实:
参考资料
snorkel
jupyter notebook调试pyspark
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)