我有下面的目录在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文件时处理模式,以便在读取时将问题列转换为字符串?
1条答案
按热度按时间h7appiyu1#
我认为最好的办法是显式地描述模式,并使用它加载部分不正确的数据集。我使用的技巧是选择“最宽”(最宽容)的数据类型(例如。
string
)并将其用于受此数据不正确性影响的列。一旦数据集被加载,您就可以对其进行另一次传递,将其转换为预期的类型(例如。double
).我不知道如何在python中为10+个字段定义一个模式,而无需像使用scala那样键入太多内容(这提供了可以很好地使用的case类)
Encoders
公用事业)。