CSV文件
本文提供了使用Databricks使用Python、Scala、R和SQL讀取和寫入CSV文件的示例。
處理格式錯誤的CSV記錄
讀取具有指定模式的CSV文件時,文件中的數據可能與模式不匹配。例如,包含城市名稱的字段將不會解析為整數。結果取決於解析器運行的模式:
寬容的
(默認):為不能正確解析的字段插入空值DROPMALFORMED
:刪除包含不能解析的字段的行FAILFAST
:如果發現任何格式錯誤的數據,將中止讀取
要設置模式,請使用模式
選擇。
diamonds_df=(火花.讀.格式(“csv”).選項(“模式”,“寬容”).負載(“/ databricks-datasets / Rdatasets /數據- 001 / csv / ggplot2 / diamonds.csv”))
在寬容的
模式下,可以使用以下方法之一檢查不能正確解析的行:
您可以提供該選項的自定義路徑
badRecordsPath
將損壞的記錄記錄到一個文件中。您可以添加列
_corrupt_record
到提供給dataframerader的模式,以審查結果DataFrame中的損壞記錄。
請注意
的badRecordsPath
選項優先於_corrupt_record
,這意味著寫入到所提供路徑的格式不正確的行不會出現在結果的DataFrame中。
格式錯誤記錄的默認行為在使用獲救數據列.
獲救數據列
請注意
中支持此特性Databricks Runtime 8.3(不支持)及以上。
當使用寬容的
模式下,您可以啟用已保存的數據列來捕獲任何未被解析的數據,因為記錄中的一個或多個字段存在以下問題之一:
不在提供的模式中。
與提供的模式的數據類型不匹配。
大小寫與所提供模式中的字段名不匹配。
獲救的數據列作為一個JSON文檔返回,其中包含獲救的列和記錄的源文件路徑(源文件路徑在Databricks Runtime 8.3及以上版本中可用)。要從已保存的數據列中刪除源文件路徑,可以設置SQL配置spark.conf.set(“spark.databricks.sql.rescuedDataColumn.filePath.enabled”,“假”)
.可以通過設置該選項啟用已保存的數據列rescuedDataColumn
在讀取數據時,將其轉換為列名,例如_rescued_data
與spark.read.option(“rescuedDataColumn”,“_rescued_data”).format (csv) .load(<路徑>)
.
CSV解析器支持三種解析方式:寬容的
,DROPMALFORMED
,FAILFAST
.當與rescuedDataColumn
,數據類型不匹配不會導致記錄被刪除DROPMALFORMED
模式或拋出錯誤FAILFAST
模式。隻有損壞的記錄(即不完整或格式錯誤的csv)才會被刪除或拋出錯誤。
當rescuedDataColumn
用於寬容的
模式時,適用於腐敗的記錄:
文件的第一行(標題行或數據行)設置預期的行長。
具有不同列數的行被認為是不完整的。
數據類型不匹配不被認為是損壞記錄。
隻有不完整和格式錯誤的CSV記錄才會被認為是損壞的,並記錄到
_corrupt_record
列或badRecordsPath
.