<span style="font-size:18px;">import sys, time reload(sys) sys.setdefaultencoding('utf-8') from pyspark import SparkContext from pyspark.streaming import StreamingContext from pyspark.sql import SQLContext, Row from pyspark.sql.types import * from pyspark.sql import HiveContext *************** *************** ***************</span>
对于这块代码的开始首先导入sys, time,
然后再reload(sys)看似是重复操作,但是在后面的代码中,
当python格式的模板(它就是使用__import__来导入模板的)被导入后,然后进行了修改,
如何重新导入使其生效呢。那么就可以使用reload来实现。
<span style="font-size:18px;">dirname = os.path.dirname(os.path.abspath(modulename)) filename, ext = os.path.splitext(os.path.basename(modulename)) if ext.lower() != ‘.py’: return {}, {} if sys.modules.has_key(filename): mod = sys.modules[filename] reload(mod) else: if dirname: sys.path.insert(0, dirname) mod = __import__(filename) if dirname: del sys.path[0]</span>
这段代码是用来导入一个python的文件,你传给一个字符串格式的python文件名,
如果有目录则将其插入到sys.path中,最后再删除。如果在sys.modules已经存在此模块,
说明以前导入过,则调用reload重新装入,否则是一个未导入过的模块,可以使用__import__进行导入。
import和reload的使用注意事项
由于某种原因,一旦人们知道通过import和reload运行文件,有些人就会倾向于仅使用这个方法,
而忽略了能够运行最新版本的代码的其他选择(例如,图标点击、IDLE菜单选项以及系统命令行)。
这会让人变得困惑:你需要记住是何时导入的,才能知道能不能够reload,你需要记住当调用reload时
需要使用括号,并且要记住让代码的最新版本运行时首先要使用reload。此外,reload是不可传递的,
重载一个模块的话只会重载该模块,而不能够重载该模块所导入的任何模块,因此,有时候必须reload
多个文件。