處理不良記錄和文件

Databricks提供了許多處理包含壞記錄的文件的選項。壞數據的例子包括:

  • 記錄不完整或損壞:主要見於基於文本的文件格式,如JSON和CSV。例如,沒有右大括號的JSON記錄或沒有標題或CSV文件的第一條記錄那麼多列的CSV記錄。

  • 不匹配的數據類型:當列的值不具有指定或推斷的數據類型時。

  • 錯誤的字段名稱:當文件或記錄中指定的列名的大小寫與指定的或推斷的模式不同時,在所有文件格式中都可能發生。

  • 損壞的文件:無法讀取文件,可能是由於元數據或二進製文件類型(如Avro、Parquet、ORC)的數據損壞。在極少數情況下,可能是由底層存儲係統長期的瞬時故障引起的。

  • 丟失的文件:查詢分析時發現的文件,處理時已不存在。

使用badRecordsPath

當你設置badRecordsPath,指定路徑記錄數據加載過程中遇到的壞記錄或文件的異常。

除了損壞的記錄和文件外,指示刪除文件的錯誤、網絡連接異常、IO異常等將被忽略並記錄在badRecordsPath

請注意

使用badRecordsPath選項在基於文件的數據源中有一些重要的限製:

  • 它是非事務性的,可能導致不一致的結果。

  • 瞬態錯誤被視為故障。

無法找到輸入文件

瓦爾df火花選項“badRecordsPath”“/ tmp / badRecordsPath”格式“鋪”).負載“/輸入/ parquetFile”//刪除輸入parquet文件'/input/parquetFile'dbutilsfsrm“/輸入/ parquetFile”df顯示()

在上麵的例子中,sincedf.show ()如果無法找到輸入文件,Spark會創建一個JSON格式的異常文件來記錄錯誤。例如,/ tmp / badRecordsPath / 20170724 t101153 / bad_files / xyz異常文件的路徑。該文件位於指定的badRecordsPath目錄,/ tmp / badRecordsPath20170724 t101153這是生成時間嗎DataFrameReaderbad_files異常類型。xyz是一個包含JSON記錄的文件,其中包含壞文件的路徑和異常/原因消息。

輸入文件包含壞記錄

//創建一個包含可解析記錄和已損壞記錄的json文件Seq{"a": 1, "b": 2}""" "{不良記錄“”“”).toDF()。格式“文本”).保存“/ tmp /輸入/ jsonFile”瓦爾df火花選項“badRecordsPath”“/ tmp / badRecordsPath”模式"a int, b int"格式“json”負載“/ tmp /輸入/ jsonFile”df顯示()

在這個例子中,DataFrame隻包含第一個可解析記錄({“a”:1,“b”:2}).第二個不良記錄({不良記錄)記錄在異常文件中,異常文件是一個JSON文件,位於/ tmp / badRecordsPath / 20170724 t114715 / bad_records / xyz.異常文件包含壞記錄、包含該記錄的文件的路徑以及異常/原因消息。找到異常文件後,可以使用JSON讀取器來處理它們。