你好,
我們正在遷移項目從Cloudera磚。
. py文件中所有的代碼,我們決定保持相同的磚也試圖通過磚從GIT執行相同的工作流。
我們有兩種退出功能要求:
1。軟退出sys.exit(0) -當作業標準滿足某些條件,那麼我們做軟存在sys.exit(0),基本上終止輕輕地工作,標誌著成功的工作
2。工作與sys.exit終止(1)——當工作標準滿足某些條件,那麼我們做終止工作與sys.exit(1),基本上終止工作,標誌著失敗的工作。
上述標準工作如預期在任何Python環境中而不是磚。
在磚,sys.exit(1)以及sys.exit(0)被標記為失敗的工作。
我讀過一篇文章在社區,有人提到“使用spark.stop (), sc.stop (), system . exit()在您的應用程序可能會導致這種行為。磚管理上下文自行關閉。強行關閉這可能導致突然的行為。”
鏈接:https://community.m.eheci.com/t5/data-engineering/why-do-i-see-my-job-marked-as-failed-on-the-dat..。
如果這是真的,那麼最好的選擇來實現sys.exit磚(0)?
任何幫助將大大讚賞。
僅供參考:. py文件中的代碼,我們不想使用筆記本電腦來刺激就業。
這裏有一個例子來執行和看到的行為:
拉,
我檢查和建議是結構內部代碼以這樣一種方式,它返回從主函數滿足某些條件。我修改你的代碼下麵你所看到的。
# sys.exit(0)等效def main (): bucket_name =“刺激”如果bucket_name = =“刺激”:剩下的代碼返回# if __name__ = =“__main__”:主要()
我測試了不同層次的嵌套,它是按預期工作。
這是示例代碼:
進口sys bucket_name = "刺激" # str (sys.argv [1]) .lower () def主要():i, j = 0, 0, j < = 2:印刷(f“while循環迭代:{j}”)範圍(0,3):我的打印(f“循環iteratation:{我}”)如果bucket_name = =“刺激”我和j = = 1 = = 1:打印(“成功。刺激。現有0 ")返回True打印(“回歸”後)剩下的代碼#:#打印(“失敗。DEV。現有1”)# sys.exit(1)打印(f”:而迭代:{j}和迭代:{我}”)繼續打印(如果其他外)+ = 1打印(“內循環”)j + = 1打印(“for循環的終結”)打印(“while循環的終結”)if __name__ = = " __main__”:主要()
拉,
我檢查和建議是結構內部代碼以這樣一種方式,它返回從主函數滿足某些條件。我修改你的代碼下麵你所看到的。
# sys.exit(0)等效def main (): bucket_name =“刺激”如果bucket_name = =“刺激”:剩下的代碼返回# if __name__ = =“__main__”:主要()
我測試了不同層次的嵌套,它是按預期工作。
這是示例代碼:
進口sys bucket_name = "刺激" # str (sys.argv [1]) .lower () def主要():i, j = 0, 0, j < = 2:印刷(f“while循環迭代:{j}”)範圍(0,3):我的打印(f“循環iteratation:{我}”)如果bucket_name = =“刺激”我和j = = 1 = = 1:打印(“成功。刺激。現有0 ")返回True打印(“回歸”後)剩下的代碼#:#打印(“失敗。DEV。現有1”)# sys.exit(1)打印(f”:而迭代:{j}和迭代:{我}”)繼續打印(如果其他外)+ = 1打印(“內循環”)j + = 1打印(“for循環的終結”)打印(“while循環的終結”)if __name__ = = " __main__”:主要()