处理不良记录和文件
砖提供了许多选项来处理文件包含不良记录。坏数据的例子包括:
不完整的或腐败的记录:主要观察到基于文本的文件格式,如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读者处理它们。