原因是spark-sql执行sql有三中模式:ANSI, LEGACY, STRICT。
ANSI模式是标准sql,不允许不合理的类型转换,与PostgreSQL相同。
LEGACY模式允许类型强制转换,只要它是有效的'Cast' 这也是Spark 2.x中的唯一行为,它与Hive兼容。
对于STRICT模式 Spark不允许任何可能的精度损失或数据截断。
解决方法:找到spark/conf/spark-defaults.conf 添加:
spark.sql.storeAssignmentPolicy=LEGACY
注意:本文归作者所有,未经作者允许,不得转载