處理不良記錄和文件
磚提供了許多選項來處理文件包含不良記錄。壞數據的例子包括:
不完整的或腐敗的記錄:主要觀察到基於文本的文件格式,如JSON和CSV。例如,一個JSON記錄沒有關閉括號或CSV記錄沒有盡可能多的列標題或CSV文件的第一張唱片。
不匹配的數據類型:當一個列的值沒有指定或推斷數據類型。
壞的字段名稱:可以發生在所有文件格式,當文件或記錄中指定的列名稱有不同套管比指定的或推斷模式。
損壞的文件:當一個文件無法讀取,這可能是由於在二進製文件元數據或數據腐敗類型如Avro,拚花,獸人。在罕見的情況下,可能會造成長期的瞬態故障在底層存儲係統。
丟失的文件:一個文件被發現在查詢分析時間和處理時間已不複存在。
使用badRecordsPath
當您設置badRecordsPath
指定的路徑記錄異常數據加載期間遇到壞的記錄或文件。
除了腐敗記錄和文件,錯誤指示刪除文件,網絡連接異常,IO例外,等等都被忽略,並且記錄下badRecordsPath
。
請注意
使用badRecordsPath
選項在一個基於文件的數據源有幾個重要的限製:
它是非事務性的,可能會導致不一致的結果。
瞬態錯誤被視為失敗。
無法找到輸入文件
瓦爾df=火花。讀。選項(“badRecordsPath”,“/ tmp / badRecordsPath”)。格式(“鋪”)。負載(“/輸入/ parquetFile”)/ /刪除輸入鋪文件' /輸入/ parquetFile 'dbutils。fs。rm(“/輸入/ parquetFile”)df。顯示()
在上麵的例子中,df.show ()
無法找到輸入文件,火花以JSON格式創建一個異常文件來記錄錯誤。例如,/ tmp / badRecordsPath / 20170724 t101153 / bad_files / xyz
是異常的路徑文件。這個文件是根據指定badRecordsPath
目錄,/ tmp / badRecordsPath
。20170724 t101153
的創建時間是DataFrameReader
。bad_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讀者處理它們。