本指南是撰寫 Apache Spark 中標準化且可操作錯誤訊息的參考。
從 Spark 拋出的例外應回答五個 W 和一個 H
例外提供的內容有助於回答誰(通常是使用者)、何時(通常透過 log4j
包含在記錄中)和哪裡(通常包含在堆疊追蹤中)。但是,這些答案通常不足以讓使用者解決問題。回答剩餘問題(什麼、為什麼和如何)的錯誤訊息可將使用者的挫折感降至最低。
在許多情況下,錯誤訊息應明確回答什麼、為什麼和如何。
無法為內部類別 {} 產生編碼器,因為無法存取定義此類別的範圍。請嘗試將此類別移出其父類別。
如果建議的修正(如何)感覺很武斷,提供錯誤發生的原因可以減少使用者的挫折感。
之前
之後
函數名稱 {} 無效。暫時函數無法屬於目錄。請指定一個一或兩部分的函數名稱。
並非所有錯誤訊息都應該如此詳細。有時候,明確說明如何解決問題會是多餘的;在這種情況下,你可以略過明確的說明。
之前
之後
無法為視窗表達式 {} 指定框架。視窗表達式包含函數框架 {} 和規格框架 {} 之間的不相符。
之前
之後
無效的小數 {};在位置 {} 剖析時遇到錯誤。
有時候,即使明確說明原因問題發生也會是多餘的;在這種情況下,你可以略過明確的說明。
片語 | 使用時機 | 範例 |
---|---|---|
不支援 | 使用者可能合理地假設支援此操作,但事實並非如此。如果開發人員新增對此操作的支援,此錯誤可能會在未來消失。 |
資料類型 {} 不支援。
|
無效 / 不允許 / 意外 | 使用者在指定操作時發生錯誤。訊息應告知使用者如何解決錯誤。 |
陣列大小為 {},索引 {} 無效。
|
為子句 {} 找到 {} 個產生器。只允許一個產生器 存在。
|
||
找到 意外 的狀態格式版本 {}。預期的版本為 1 或 2。
|
||
無法 | 系統遇到無法合理歸咎於使用者錯誤的意外錯誤。 |
無法編譯 {}。
|
無法 | 任何時候,最好只在上述任何替代方案不適用的情況下使用。 |
無法為不支援的類型 {} 產生程式碼。
|
最佳實務 | 之前 | 之後 |
---|---|---|
使用主動語態 |
資料類型 {} 不受 {} 支援。
|
{} 不支援 資料類型 {}。
|
避免使用基於時間的陳述,例如承諾未來支援 |
樞紐目前 不支援 Pandas UDF 彙總運算式。
|
樞紐 不支援 Pandas UDF 彙總運算式。
|
尚未 支援 Parquet 類型:{}。
|
{} 不支援 Parquet 類型。
|
|
使用現在式描述錯誤並提供建議 |
無法在 {} 的 {} 找到參考欄。
|
無法在 {} 的 {} 找到參考欄。
|
連接策略提示參數 應該是識別碼或字串,但實際上是 {}。
|
無法使用連接策略提示參數 {}。請使用資料表名稱或識別碼指定參數。
|
|
如果解決方案不明確,請提供具體範例 |
{} 提示預期參數為分割區編號。
|
{} 提示預期一個分割號碼作為參數。 例如,用 {}(3) 指定 3 個分割。
|
避免聽起來像指控、批判或侮辱 |
您必須為 {} 指定一個金額。
|
{} 不能為空。為 {} 指定一個金額。
|
直接了當 |
Spark 資料來源 V2 中不允許 LEGACY 儲存指派原則。 請將 spark.sql.storeAssignmentPolicy 組態設定為 其他值。
|
Spark 資料來源 V2 不允許 LEGACY 儲存指派原則。將 spark.sql.storeAssignment 組態設定為 ANSI 或 STRICT。
|
在使用者介面錯誤中不要使用程式設計術語 |
RENAME TABLE 來源和目的地資料庫不匹配: '{}' != '{}'。
|
RENAME TABLE 來源和目的地資料庫不匹配。來源資料庫為 {},但目的地資料庫為 {}。
|