我得到這個失敗原因在一個相當簡單的流媒體工作。我在一個筆記本運行工作。筆記本依賴於python模塊,我同步與dbx的DBFS。
在筆記本一般來說,可用的模塊,即。進口mymodule裏的工作,之後我設置python路徑
' ' '
導入係統
sys.path.append (' / dbfs / tmp / ')
' ' '
,我同步位置。目前為止一切都很順利。
然而,當我試圖執行流的細胞工作,工作失敗
' ' '
工作階段失敗而終止:Task 4階段56.0失敗了4次,最近的失敗:在舞台上失去了任務4.3 56.0 (TID 1213) (ip - 10 - 33 - 226 - 58. - ec2.internal執行人司機):org.apache.spark.api.python。PythonException:“pyspark.serializers。SerializationError:由回溯(最近的電話):
文件“/磚/火花/ python / pyspark /序列化器。在_read_with_length py”, 188行
返回self.loads (obj)
文件“/磚/火花/ python / pyspark /序列化器。py”, 540行,在負載
cloudpickle返回。負載(obj,編碼=編碼)
文件“/磚/火花/ python / pyspark / cloudpickle / cloudpickle。在subimport py”, 679行
__import__(名字)
ModuleNotFoundError: mymodule裏
' ' '
我真的很想知道這裏發生了什麼。我得到這是不一定理想,甚至支持工作流,但它是非常有用的我的理解的磚平台了解為什麼筆記本本身是能夠解決模塊,但流媒體工作不是。Beplay体育安卓版本
這是一個單節點的個人集群,就其價值而言。
嗨@Benjamin院長
希望一切都好!隻是想檢查如果你能解決你的問題,你會很高興分享解決方案或答案標記為最佳?其他的請讓我們知道如果你需要更多的幫助。
我們很想聽到你的聲音。
謝謝!
@Benjamin院長:我給你幾個指針開始考慮這個問題,你可以繼續測試,實現最適合你。
看起來這裏的問題是,該模塊mymodule裏不可用火花執行人的Python環境。運行引發的工作時,它運行在一個單獨的過程比筆記本和環境,和環境是由集群配置。因此,就在筆記本上設置Python路徑環境並不一定使火花環境中可用的模塊。
另外,你提供的錯誤信息表明運行流的火花執行人的工作是無法找到mymodule裏Python模塊。這可能發生,因為火花上下文創建的流的工作不同於火花上下文創建的筆記本電腦環境。具體來說,Python環境和路徑可能不同,這可能導致模塊沒有被發現。
確保模塊的一個方法是可用在所有工作節點,包括火花工作的依賴性。你可以通過指定——py-files選項運行流時的工作。這個選項需要一個以逗號分隔的Python文件分發給工人節點。例如,如果您的模塊在一個名為mymodule裏的文件。py和它位於/ dbfs / tmp /,您可以運行流工作使用下麵的命令:
spark-submit——py-files / dbfs / tmp / mymodule裏。py my_streaming_job.py
my_streaming_job的地方。py腳本包含流媒體的工作。這將確保模塊是可用在所有工作節點流執行工作。
請讓我們知道如果這有助於思考,你可以試著去使它工作!謝謝。