博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
hadoop streaming 中跑python程序,自定义模块的导入
阅读量:5219 次
发布时间:2019-06-14

本文共 1416 字,大约阅读时间需要 4 分钟。

今天在做代码重构,以前将所有python文件放到一个文件夹下,上传到hadoop上跑,没有问题;不过随着任务的复杂性增加,感觉这样甚是不合理,于是做了个重构,建了好几个包存放不同功能的python文件,历程如下:

1. 刚开始的时候,在IDE里搞,点击运行,正确、非常赞;

2. 然后搬到服务器上搞,出现了这样的问题:

ImportError: no module named XXX

啊,看样子是包引用中路径不对,于是找文章解决:

  python中,每个py文件被称之为模块,每个具有__init__.py文件的目录被称为包。只要模

块或者包所在的目录在sys.path中,就可以使用import 模块或import 包来使用
如果你要使用的模块(py文件)和当前模块在同一目录,只要import相应的文件名就好,比
如在a.py中使用b.py: 
import b 
但是如果要import一个不同目录的文件(例如b.py)该怎么做呢? 
首先需要使用sys.path.append方法将b.py所在目录加入到搜素目录中。然后进行import即
可,例如 

import sys import os curPath = os.path.abspath(os.path.dirname(__file__)) rootPath = os.path.split(curPath)[0] sys.path.append(rootPath) 第一个问题解决,高兴!

3. 而后尝试在hadoop-streaming上跑程序,额,一直在报错:

ImportError: no module named XXX

心想也是因为这个路径问题,试了很多种方法:

  后来在stackoverflow发现有人问了同样的问题,并且我使用其中一个方案解决了:

When Hadoop-Streaming starts the python scripts, your python script's path is where the script file really is. However, hadoop starts them at './', and your lib.py(it's a symlink) is at './', too. So, try to add 'sys.path.append("./")' before you import lib.py like this: import sys sys.path.append('./') import lib 当Hadoop-Streaming启动python脚本时,您的python脚本的路径就是脚本文件的实际位置。 然而,hadoop以'./'开头,lib.py(它是一个符号链接)也在'./'。 因此,在导入lib.py之前,尝试添加“sys.path.append(”./“)”“。 import sys sys.path.append('./') import lib 并且导入模块和包时,不能用 from XXX import YYY的方式做了,必须要用 import XXX, 使用YYY的时候,要用XXX.YYY来调用;反复尝试终于发现了这点。也算没白费时间吧。

 

转载于:https://www.cnblogs.com/wrh526/p/9456558.html

你可能感兴趣的文章
go语言学习十三 - 相等性
查看>>
Idea 提交代码到码云(提交到github也大同小异)
查看>>
c#连接excel2007未安装ISAM解决
查看>>
Mono 异步加载数据更新主线程
查看>>
初识lua
查看>>
我是插件狂人,jDuang,jValidator,jModal,jGallery
查看>>
张季跃 201771010139《面向对象程序设计(java)》第四周学习总结
查看>>
如何解除循环引用
查看>>
android中fragment的使用及与activity之间的通信
查看>>
字典【Tire 模板】
查看>>
jquery的contains方法
查看>>
python3--算法基础:二分查找/折半查找
查看>>
Perl IO:随机读写文件
查看>>
Perl IO:IO重定向
查看>>
转:基于用户投票的排名算法系列
查看>>
WSDL 详解
查看>>
[转]ASP数组全集,多维数组和一维数组
查看>>
C# winform DataGridView 常见属性
查看>>
逻辑运算和while循环.
查看>>
Nhiberate (一)
查看>>