處理不良記錄和文件
Databricks提供了許多處理包含壞記錄的文件的選項。壞數據的例子包括:
記錄不完整或損壞:主要見於基於文本的文件格式,如JSON和CSV。例如,沒有右大括號的JSON記錄或沒有標題或CSV文件的第一條記錄那麼多列的CSV記錄。
不匹配的數據類型:當列的值不具有指定或推斷的數據類型時。
錯誤的字段名稱:當文件或記錄中指定的列名的大小寫與指定的或推斷的模式不同時,在所有文件格式中都可能發生。
損壞的文件:無法讀取文件,可能是由於元數據或二進製文件類型(如Avro、Parquet、ORC)的數據損壞。在極少數情況下,可能是由底層存儲係統長期的瞬時故障引起的。
丟失的文件:查詢分析時發現的文件,處理時已不存在。
使用badRecordsPath
當你設置badRecordsPath
,指定路徑記錄數據加載過程中遇到的壞記錄或文件的異常。
除了損壞的記錄和文件外,指示刪除文件的錯誤、網絡連接異常、IO異常等將被忽略並記錄在badRecordsPath
.
請注意
使用badRecordsPath
選項在基於文件的數據源中有一些重要的限製:
它是非事務性的,可能導致不一致的結果。
瞬態錯誤被視為故障。
無法找到輸入文件
瓦爾df=火花.讀.選項(“badRecordsPath”,“/ tmp / badRecordsPath”).格式(“鋪”).負載(“/輸入/ parquetFile”)//刪除輸入parquet文件'/input/parquetFile'dbutils.fs.rm(“/輸入/ parquetFile”)df.顯示()
在上麵的例子中,sincedf.show ()
如果無法找到輸入文件,Spark會創建一個JSON格式的異常文件來記錄錯誤。例如,/ tmp / badRecordsPath / 20170724 t101153 / bad_files / xyz
異常文件的路徑。該文件位於指定的badRecordsPath
目錄,/ tmp / badRecordsPath
.20170724 t101153
這是生成時間嗎DataFrameReader
.bad_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讀取器來處理它們。