我有一个简单的火花程序,我收到以下错误 -
错误: -
ImportError: No module named add_num
用于运行的命令: -
./bin/spark-submit /Users/workflow/test_task.py
代码: -
from __future__ import print_function
from pyspark.sql import SparkSession
from add_num import add_two_nos
def map_func(x):
print(add_two_nos(5))
return x*x
def main():
spark = SparkSession\
.builder\
.appName("test-task")\
.master("local[*]")\
.getOrCreate()
rdd = spark.sparkContext.parallelize([1,2,3,4,5]) # parallelize into 2
rdd = rdd.map(map_func) # call the image_chunk_func
print(rdd.collect())
spark.stop()
if __name__ == "__main__":
main()
功能代码: -
def add_two_nos(x):
return x*x
答案 0 :(得分:1)
您可以通过添加语句sc.addPyFile(Path)
来指定要在代码中导入的.py文件表单。
传递的路径可以是本地文件,HDFS(或其他Hadoop支持的文件系统)中的文件,也可以是HTTP,HTTPS或FTP URI。
然后使用from add_num import add_two_nos
答案 1 :(得分:0)
您需要在spark-submit命令中包含一个包含add_num.py的zip。
./bin/spark-submit --py-files sources.zip /Users/workflow/test_task.py
当向python提交python应用程序时,main函数/文件(此处为test_task.py)导入的所有源文件应以egg或zip格式打包,并使用--py-files选项提供给spark。如果main函数只需要一个其他文件,您可以直接提供它而不压缩它。
./bin/spark-submit --py-files add_num.py /Users/workflow/test_task.py
上面的命令也应该有效,因为只需要一个其他的python源文件。