处理不良记录和文件

砖提供了许多选项来处理文件包含不良记录。坏数据的例子包括:

  • 不完整的或腐败的记录:主要观察到基于文本的文件格式,如JSON和CSV。例如,一个JSON记录没有关闭括号或CSV记录没有尽可能多的列标题或CSV文件的第一张唱片。

  • 不匹配的数据类型:当一个列的值没有指定或推断数据类型。

  • 坏的字段名称:可以发生在所有文件格式,当文件或记录中指定的列名称有不同套管比指定的或推断模式。

  • 损坏的文件:当一个文件无法读取,这可能是由于在二进制文件元数据或数据腐败类型如Avro,拼花,兽人。在罕见的情况下,可能会造成长期的瞬态故障在底层存储系统。

  • 丢失的文件:一个文件被发现在查询分析时间和处理时间已不复存在。

使用badRecordsPath

当您设置badRecordsPath指定的路径记录异常数据加载期间遇到坏的记录或文件。

除了腐败记录和文件,错误指示删除文件,网络连接异常,IO例外,等等都被忽略,并且记录下badRecordsPath

请注意

使用badRecordsPath选项在一个基于文件的数据源有几个重要的限制:

  • 它是非事务性的,可能会导致不一致的结果。

  • 瞬态错误被视为失败。

无法找到输入文件

瓦尔df=火花选项(“badRecordsPath”,“/ tmp / badRecordsPath”)格式(“铺”)。负载(“/输入/ parquetFile”)/ /删除输入铺文件' /输入/ parquetFile 'dbutilsfsrm(“/输入/ parquetFile”)df显示()

在上面的例子中,df.show ()无法找到输入文件,火花以JSON格式创建一个异常文件来记录错误。例如,/ tmp / badRecordsPath / 20170724 t101153 / bad_files / xyz是异常的路径文件。这个文件是根据指定badRecordsPath目录,/ tmp / badRecordsPath20170724 t101153的创建时间是DataFrameReaderbad_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读者处理它们。