大家早上好,关于模式和pyspark框架的快速问题。假设我从一个模式开始,并使用该模式将数据从文件加载到一个pyspark框架中。到目前为止,一切顺利。
然而,我注意到,当一个可选字段(在模式上为nullable=true)在我的数据中根本不存在时,pyspark只是不将其包含在模式中(而不是将其值设置为null),所以当我稍后对该字段进行选择时,我的代码会卡住。
所以我的问题是,有没有一种方法可以让pyspark在schema中创建每个元素,并在它们不存在时将它们设置为null,而不是仅仅从schema中删除它们?
1条答案
按热度按时间4ngedf3f1#
当阅读具有指定架构的CSV文件时,文件中的数据可能与架构不匹配。
**PERMISSIVE(默认):为无法正确解析的字段插入空值DROPMALFORMED:删除包含无法解析的字段的行FAILFAST:**如果发现任何格式错误的数据,则中止阅读要设置模式,请使用mode选项。
示例数据和模式:
字符串
我尝试了下面的例子:
型
结果:
型
PERMISSIVE
模式将通过将字段设置为null来处理丢失的字段。在
PERMISSIVE
模式下,可以使用以下方法之一来检查无法正确解析的行:您可以为选项
badRecordsPath
提供自定义路径,以将损坏的记录到文件中。您可以将column _corrupt_record
添加到提供给DataFrameReader的架构中,以查看生成的DataFrame中的损坏记录。参考:
处理格式错误的CSV记录
**第二种方法:**使用fillna方法将空值填充为默认值。
型
结果如下:
型