spark submit的时候怎么导入自己写的依赖模块?

wxmimperio
  • 720

python代码中的import

from spark_learning.utils.default_utils import setDefaultEncoding,initSparkContext,ensureOffset

submit命令:

bin/spark-submit --jars /home/jabo/software/spark-1.5.2-bin-hadoop2.6/lib/spark-streaming-kafka-assembly_2.10-1.5.2.jar\
/home/jabo/spark-by-python/spark_learning/third_day/streaming_kafka_avg.py\
--py-files /home/jabo/spark-by-python/spark_learning/utils/default_utils.py

官网解释:

For Python applications, simply pass a .py file in the place of <application-jar> instead of a JAR, and add Python .zip, .egg or .py files to the search path with --py-files.

但是会报错,找不到import模块:

Traceback (most recent call last):
  File "/home/jabo/spark-by-python/spark_learning/third_day/streaming_kafka_avg.py", line 10, in <module>
    import spark_learning.utils.default_utils
ImportError: No module named spark_learning.utils.default_utils

如何解决??

回复
阅读 16.4k
2 个回答

你可以试一下把--py-files 参数 放在你要运行脚本的前面哈!刚才我们也遇到这个问题 就是这样解决的!

whwby
  • 2
新手上路,请多包涵

答案链接:http://www.cnblogs.com/cbryge...

简单来说, 所有的import操作必须在context完成之后. pyspark之所以不报错就是因为context已经初始化好了. 所以我们简单改下 app.py 中import的位置就可以了:
if name == "__main__": sc = SparkContext(appName="ACoolApp") import common

然后把--py-files 参数 放在你要运行脚本的前面

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
宣传栏