![](/img/trans.png)
[英]How to execute multiple spark-submit commands using python script
[英]Error when using multiple python files spark-submit
我有一個由多個文件組成的spark應用程序。
當我使用以下方式啟動Spark:
../hadoop/spark-install/bin/spark-submit main.py --py-files /home/poiuytrez/naive.py,/home/poiuytrez/processing.py,/home/poiuytrez/settings.py --master spark://spark-m:7077
我收到一個錯誤:
15/03/13 15:54:24 INFO TaskSetManager: Lost task 6.3 in stage 413.0 (TID 5817) on executor spark-w-3.c.databerries.internal: org.apache.spark.api.python.PythonException (Traceback (most recent call last): File "/home/hadoop/spark-install/python/pyspark/worker.py", line 90, in main
command = pickleSer._read_with_length(infile) File "/home/hadoop/spark-install/python/pyspark/serializers.py", line 151, in _read_with_length
return self.loads(obj) File "/home/hadoop/spark-install/python/pyspark/serializers.py", line 396, in loads
return cPickle.loads(obj) ImportError: No module named naive
這很奇怪,因為我沒有序列化任何東西。 naive.py也可以在同一路徑的每台機器上使用。
對可能發生的事情的任何見解? 問題不會發生在我的筆記本電腦上。
PS:我使用的是Spark 1.2.0。
您可能在類或腳本的頂部導入模塊,然后在RDD轉換中使用該模塊中的內容。 這可能與您的代碼中的內容類似:
import naive
def my_fxn(record):
naive.some_obj_or_fxn()
...etc...
...etc..
myRdd.map(my_fxn)
如果您編寫這樣的函數,PySpark會嘗試對在類/腳本頂部導入的所有模塊進行pickle和unpickle。 相反,您應該在使用它們的函數內導入模塊,如下所示:
def my_fxn(record):
import naive
naive.some_obj_or_fxn()
...etc...
首先,您不需要將naive.py
放到任何奴隸naive.py
。 我用2種方法解決了這個問題:
方法-1
只需將main.py
放在cmd行的末尾即可。
../hadoop/spark-install/bin/spark-submit --master spark://spark-m:7077 --py-files /home/poiuytrez/naive.py,/home/poiuytrez/processing.py,/home/poiuytrez/settings.py main.py
或方法-2
在main.py
使用sc.addPyFile('py_file_name')
sc.addPyFile('/home/poiuytrez/naive.py')
sc.addPyFile('/home/poiuytrez/processing.py')
sc.addPyFile('/home/poiuytrez/settings.py')
首先,你的import包必須是python包,即你的包應該包含__init__.py
。 那么,你的代碼運行良好!
最后,包括python文件( - py-files,sc.addPyFile)不是必不可少的,我用spark 2.3測試。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.