CSV文件

本文提供了使用Databricks使用Python、Scala、R和SQL讀取和寫入CSV文件的示例。

請注意

可以使用SQL直接讀取CSV數據,也可以使用臨時視圖。Databricks建議使用臨時視圖。直接讀取CSV文件存在以下缺點:

看到例子

選項

您可以為CSV文件數據源配置多個選項。有關支持的讀寫選項,請參閱以下Apache Spark參考文章。

處理格式錯誤的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_dataspark.read.option(“rescuedDataColumn”,“_rescued_data”).format (csv) .load(<路徑>)

CSV解析器支持三種解析方式:寬容的DROPMALFORMED,FAILFAST.當與rescuedDataColumn,數據類型不匹配不會導致記錄被刪除DROPMALFORMED模式或拋出錯誤FAILFAST模式。隻有損壞的記錄(即不完整或格式錯誤的csv)才會被刪除或拋出錯誤。

rescuedDataColumn用於寬容的模式時,適用於腐敗的記錄

  • 文件的第一行(標題行或數據行)設置預期的行長。

  • 具有不同列數的行被認為是不完整的。

  • 數據類型不匹配不被認為是損壞記錄。

  • 隻有不完整和格式錯誤的CSV記錄才會被認為是損壞的,並記錄到_corrupt_record列或badRecordsPath

例子

這些例子使用鑽石的數據集.指定數據集的路徑以及所需的任何選項。

讀取任何語言的文件

本筆記本演示了如何使用Scala、R、Python和SQL讀取文件、顯示示例數據和打印數據模式。

閱讀CSV文件筆記本

在新標簽頁打開筆記本

指定模式

當已知CSV文件的模式時,可以使用命令為CSV閱讀器指定所需的模式模式選擇。

使用模式筆記本讀取CSV文件

在新標簽頁打開筆記本

讀取列子集的缺陷

CSV解析器的行為取決於讀取的列集。如果指定的模式不正確,根據所訪問的列子集的不同,結果可能會有很大差異。下麵的筆記本介紹了最常見的陷阱。

讀取CSV文件筆記本的列子集的注意事項

在新標簽頁打開筆記本