如何在读取hdfs目录时处理一些文件的错误Parquet模式?

ej83mcc0  于 2021-05-24  发布在  Spark
关注(0)|答案(1)|浏览(416)

我有下面的目录在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")

问题是上述文件中的两列在某些文件中具有双重格式,而相同的列在某些文件中具有字符串格式。
合并架构给了我一个错误,无法合并double和string类型的架构。
有没有方法在读取Parquet文件时处理模式,以便在读取时将问题列转换为字符串?

h7appiyu

h7appiyu1#

我认为最好的办法是显式地描述模式,并使用它加载部分不正确的数据集。我使用的技巧是选择“最宽”(最宽容)的数据类型(例如。 string )并将其用于受此数据不正确性影响的列。一旦数据集被加载,您就可以对其进行另一次传递,将其转换为预期的类型(例如。 double ).
我不知道如何在python中为10+个字段定义一个模式,而无需像使用scala那样键入太多内容(这提供了可以很好地使用的case类) Encoders 公用事业)。

相关问题