Exception in thread “main“ org.apache.spark.sql.AnalysisException: Cannot write incompatible data to

这篇具有很好参考价值的文章主要介绍了Exception in thread “main“ org.apache.spark.sql.AnalysisException: Cannot write incompatible data to。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

这个问题发生在 Spark SQL 将数据迁移进 Hive 时会出现。

Exception in thread "main" org.apache.spark.sql.AnalysisException: Cannot write incompatible data to table '`xx`.`table_name`':
- Cannot safely cast 'input_time': string to timestamp
- Cannot safely cast 'insert_time': string to timestamp
- Cannot safely cast 'modify_time': string to timestamp;

这是因为从 Spark 3.0.0 开始,Spark SQL 增加了一个安全策略,不对非同类型的数据进行强制转换,然后就会出现这个错误。

我们在源码文件 SQLConf.scala 中发现有这样一个配置 StoreAssignmentPolicy

spark.sql.storeassignmentpolicy,spark,sql,scala
spark.sql.storeassignmentpolicy,spark,sql,scala
其中有三种策略:

  1. ANSI 策略(),不允许 Spark 进行某些不合理的类型转换,如:string 转换成 timestamp

  2. LEGACY 策略,允许 Spark 进行类型强制转换,只要它是有效的 Cast 操作。

  3. STRICT 策略,不允许 Spark 进行任何可能有损精度的转换。

解决方法:

  1. 修改 Spark 版本到 3.0.0 以下。(/dog)

  2. 修改策略为 LEGACY

指定参数:spark.sql.storeAssignmentPolicy=LEGACY

如下:文章来源地址https://www.toymoban.com/news/detail-542416.html

        val spark: SparkSession = SparkSession.
                builder()
                .master("local[*]")
                .appName("task2_1")
                .config("spark.sql.storeAssignmentPolicy","LEGACY")
                .enableHiveSupport()
                .getOrCreate()

到了这里,关于Exception in thread “main“ org.apache.spark.sql.AnalysisException: Cannot write incompatible data to的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包