我是Spark新手,試圖找到我的方式。如何在Spark工作器上調試映射函數中的錯誤?
我有一個火花應用程序,通過數據集運行復雜的地圖功能。主要與數據相關的原因,此映射函數可能會失敗。我怎樣才能得到一些有關哪裏出錯的有意義的信息?我不知道從哪裏開始。
非常感謝!
我是Spark新手,試圖找到我的方式。如何在Spark工作器上調試映射函數中的錯誤?
我有一個火花應用程序,通過數據集運行復雜的地圖功能。主要與數據相關的原因,此映射函數可能會失敗。我怎樣才能得到一些有關哪裏出錯的有意義的信息?我不知道從哪裏開始。
非常感謝!
好了,這確實是可能的,但也有一些缺陷。
從廣義上講,創建封裝從地圖的功能,例如
class CalcResult(object):
def __init__(self):
self.dataResult=None
self.TraceBackStr=None
self.wasError=None
你的結果的話,你可以測試,以記錄異常的wasError場的一類。
異常對象不能作爲追蹤對象,因爲它們不可選。所以,我建議一個格式化的字符串。
如果你想編寫單元測試,你可以從一個集合生成一個數據集,使用你的map函數映射它,並使用你最喜歡的測試套件收集一個集合來測試結果。
如果您使用的是PySpark,我並不知道如何調試Spark Job,但是使用分佈式計算引擎,調試模式總是很混亂,所以我甚至覺得值得探索這條路。
在我的公司,我們通常會在進行單元測試時想要測試特定功能的邏輯,所以您應該很樂意去。
這個答案應該涵蓋你所需要的:How do I unit test PySpark programs?
代碼可以在特定的測試數據集上正常運行。當我運行一個大的輸入數據集時,那裏會有特定的值導致邏輯失敗。我想知道這些值是什麼。它可能只有1000個輸入集中有1個出現故障,所以檢查一些是沒有用的。我可能只是在數據集中有不好的值。 – ThatDataGuy
這是什麼意思「失敗」?如果它引發異常,請嘗試捕捉它。如果它產生了錯誤的值,只需返回(輸入,輸出)而不是(輸出),然後觀察(可能使用過濾器)輸出中產生異常的輸入是什麼類型。 – Chobeat
可以說它引發了一個異常,我在地圖函數中捕獲它。那麼可以用它做什麼?我可以登錄嗎?這些日誌在哪裏去? – ThatDataGuy