處理不良記錄和文件

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

  • 不完整的或腐敗的記錄:主要觀察到基於文本的文件格式,如JSON和CSV。例如,一個JSON記錄沒有關閉括號或CSV記錄沒有盡可能多的列標題或CSV文件的第一張唱片。

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

  • 壞的字段名稱:可以發生在所有文件格式,當文件或記錄中指定的列名稱有不同套管比指定的或推斷模式。

  • 損壞的文件:當一個文件無法讀取,這可能是由於在二進製文件元數據或數據腐敗類型如Avro,拚花,獸人。在罕見的情況下,可能會造成長期的瞬態故障在底層存儲係統。

  • 丟失的文件:一個文件被發現在查詢分析時間和處理時間已不複存在。

使用badRecordsPath

當您設置badRecordsPath指定的路徑記錄異常數據加載期間遇到壞的記錄或文件。

除了腐敗記錄和文件,錯誤指示刪除文件,網絡連接異常,IO例外,等等都被忽略,並且記錄下badRecordsPath

請注意

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

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

  • 瞬態錯誤被視為失敗。

無法找到輸入文件

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

在上麵的例子中,df.show ()無法找到輸入文件,火花以JSON格式創建一個異常文件來記錄錯誤。例如,/ tmp / badRecordsPath / 20170724 t101153 / bad_files / xyz是異常的路徑文件。這個文件是根據指定badRecordsPath目錄,/ tmp / badRecordsPath20170724 t101153的創建時間是DataFrameReaderbad_files異常類型。xyz是一個文件,它包含一個JSON記錄,錯誤的文件的路徑和異常/消息的原因。

輸入文件包含不良記錄

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

在這個例子中,DataFrame隻包含第一個解析的記錄({“a”:1,“b”:2})。第二個不良記錄({不良記錄)是異常文件中記錄的,是位於一個JSON文件/ tmp / badRecordsPath / 20170724 t114715 / bad_records / xyz。除了文件包含不良記錄,包含記錄,文件的路徑和異常/消息的原因。在定位異常文件之後,您可以使用JSON讀者處理它們。