diamonds_df = (spark.read
.format("csv")
.option("mode", "PERMISSIVE")
.load("/databricks-datasets/Rdatasets/data-001/csv/ggplot2/diamonds.csv")
在 PERMISSIVE
模式下,可以使用以下方法之一检查无法正确分析的行:
你可以提供指向选项 badRecordsPath
的自定义路径,以将损坏的记录记录到文件中。
你可以将列 _corrupt_record
添加到提供给 DataFrameReader 的架构中,以查看生成的 DataFrame 中的损坏的记录。
badRecordsPath
选项优先于 _corrupt_record
,这意味着写入所提供路径的格式错误的行不会在生成的 DataFrame 中显示。
使用补救数据列时,格式错误的记录的默认行为会发生变化。
获取笔记本
补救数据列
Databricks Runtime 8.3(不受支持)及更高版本支持此功能。
使用 PERMISSIVE
模式时,可以启用补救的数据列来捕获任何未分析的数据,因为记录中的一个或多个字段存在以下问题之一:
不存在于提供的架构中。
与提供的架构的数据类型不匹配。
与提供的架构中的字段名称大小写不匹配。
补救数据列以 JSON Blob 形式返回,其中包含补救的列和记录的源文件路径(Databricks Runtime 8.3 及更高版本中支持源文件路径)。 若要从补救的数据列中删除源文件路径,可以设置 SQL 配置 spark.conf.set("spark.databricks.sql.rescuedDataColumn.filePath.enabled", "false")
。 你可以通过在读取数据时将选项 rescuedDataColumn
设置为某个列名来启用补救的数据列,例如,spark.read.option("rescuedDataColumn", "_rescued_data").format("csv").load(<path>)
的 _rescued_data
。
分析记录时,CSV 分析器支持三种模式:PERMISSIVE
、DROPMALFORMED
和 FAILFAST
。 与 rescuedDataColumn
一起使用时,数据类型不匹配不会导致在 DROPMALFORMED
模式下删除记录,或者在 FAILFAST
模式下引发错误。 只有损坏的记录(即不完整或格式错误的 CSV)会被删除或引发错误。
在 PERMISSIVE
模式下使用 rescuedDataColumn
时,以下规则适用于损坏的记录:
文件的第一行(标题行或数据行)设置预期的行长度。
具有不同列数的行视为不完整。
数据类型不匹配不视为记录受损。
只有不完整和格式错误的 CSV 记录会视为损坏并记录到 _corrupt_record
列或 badRecordsPath
。
这些示例使用钻石数据集。 指定数据集的路径以及所需的任何选项。
本节内容:
用任何语言读取文件
读取列子集的错误
用任何语言读取文件
此笔记本演示如何使用 Scala、R、Python 和 SQL 读取文件、显示示例数据和打印数据架构。
读取 CSV 文件的笔记本
获取笔记本
当 CSV 文件的架构已知时,可以用 schema
选项向 CSV 读取器指定所需的架构。
使用架构读取 CSV 文件的笔记本
获取笔记本
读取列子集的错误
CSV 分析程序的行为取决于读取的列集。 如果指定的架构不正确,则结果会有很大差异,具体取决于访问的列的子集。 以下笔记本提供最常见的错误。
读取 CSV 文件的列子集的注意事项的笔记本
获取笔记本