2016-10-06 43 views
2

我是Spark新手,試圖找到我的方式。如何在Spark工作器上調試映射函數中的錯誤?

我有一個火花應用程序,通過數據集運行復雜的地圖功能。主要與數據相關的原因,此映射函數可能會失敗。我怎樣才能得到一些有關哪裏出錯的有意義的信息?我不知道從哪裏開始。

非常感謝!

回答

0

好了,這確實是可能的,但也有一些缺陷。

從廣義上講,創建封裝從地圖的功能,例如

class CalcResult(object): 

    def __init__(self): 
     self.dataResult=None 
     self.TraceBackStr=None 
     self.wasError=None 

你的結果的話,你可以測試,以記錄異常的wasError場的一類。

異常對象不能作爲追蹤對象,因爲它們不可選。所以,我建議一個格式化的字符串。

0

如果你想編寫單元測試,你可以從一個集合生成一個數據集,使用你的map函數映射它,並使用你最喜歡的測試套件收集一個集合來測試結果。

如果您使用的是PySpark,我並不知道如何調試Spark Job,但是使用分佈式計算引擎,調試模式總是很混亂,所以我甚至覺得值得探索這條路。

在我的公司,我們通常會在進行單元測試時想要測試特定功能的邏輯,所以您應該很樂意去。

這個答案應該涵蓋你所需要的:How do I unit test PySpark programs?

+0

代碼可以在特定的測試數據集上正常運行。當我運行一個大的輸入數據集時,那裏會有特定的值導致邏輯失敗。我想知道這些值是什麼。它可能只有1000個輸入集中有1個出現故障,所以檢查一些是沒有用的。我可能只是在數據集中有不好的值。 – ThatDataGuy

+0

這是什麼意思「失敗」?如果它引發異常,請嘗試捕捉它。如果它產生了錯誤的值,只需返回(輸入,輸出)而不是(輸出),然後觀察(可能使用過濾器)輸出中產生異常的輸入是什麼類型。 – Chobeat

+0

可以說它引發了一個異常,我在地圖函數中捕獲它。那麼可以用它做什麼?我可以登錄嗎?這些日誌在哪裏去? – ThatDataGuy