Spark存储parquet报错:Expected: int, Found: INT64
原因:
hadoop上面有一个文件夹里面存储的dataFrame中的一个列名为a的字段类型为IntegerType
读取mysql中对应的表的时候相同列名a字段的类型是LongType写入parquet的时候类型变为IntegerType看起来没有什么大问题,但是之前的文件夹中的IntegerType是32位的,从mysql中读入的因为是LongType类型的,所以读取的时候变为Interger 64位的。所以报出了上述的错误。
解决方案:
利用cast函数现将Int64位数据的IntegerType转换成StringType,然后再转换成IntegerType 这个时候就会变成默认的Int32
为什么要这样去做,因为IntegerType 64位直接转换成IntegerType 32位的代码,我想不出来咋写,我歇逼了…
最后
之后遇到了except int64 Found int32的问题,这下我就没有找到什么有效的方法了,如果有更好的解决方案,请在下方留言,感激不尽,谢谢!
本文探讨了在使用Spark处理Parquet文件时遇到的类型不匹配错误:Expected:int,Found:INT64。深入分析了错误原因,即从MySQL读取的数据类型与现有Parquet文件中的类型不符。提供了通过cast函数进行类型转换的解决方案,并讨论了后续可能遇到的exceptint64Foundint32问题。
513

被折叠的 条评论
为什么被折叠?



