如何解决从HDFS目录中读取文件时,如何处理某些文件的不正确拼花模式?
我在HDFS中具有以下目录。
/HDFS/file/date=20200801/id=1
..
/HDFS/file/date=20200831/id=1
/HDFS/file/date=20200901/id=1
/HDFS/file/date=20200902/id=1
/HDFS/file/date=20200903/id=1
...
/HDFS/file/date=20200930/id=1
我正在使用以下文件读取这些文件
df=spark.read.parquet('/HDFS/file/').option("mergeSchema","true")
问题是上述文件中的几列在某些文件中具有双格式,而在某些文件中相同的列具有String格式。
合并模式给我一个错误,无法合并双精度和字符串类型的模式。
在读取镶木地板文件时是否有处理模式的方法,以便在读取时将问题列转换为字符串?
解决方法
我认为最好的选择是显式描述架构,并使用它加载部分不正确的数据集。我要用的技巧是选择“最宽”(最宽容)的数据类型(例如string
)并将其用于受此数据不正确影响的列。加载数据集后,您可以对其进行另一遍传递,以将其转换为期望的类型(例如double
)。
不知道如何在Python中为10个以上的字段定义架构,而无需像我在Scala中那样进行大量键入(这使case类可以与Encoders
实用程序很好地配合工作)。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。