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的问题,这下我就没有找到什么有效的方法了,如果有更好的解决方案,请在下方留言,感激不尽,谢谢!