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

在这里插入图片描述
在这里插入图片描述
其中有三种策略:

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

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

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

解决方法:

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

  2. 修改策略为 LEGACY

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

如下:

        val spark: SparkSession = SparkSession.
                builder()
                .master("local[*]")
                .appName("task2_1")
                .config("spark.sql.storeAssignmentPolicy","LEGACY")
                .enableHiveSupport()
                .getOrCreate()
  • 3
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
这个问题通常发生在Spark应用程序的主节点配置不正确时。根据提供的引用内容,可以看出在创建SparkSession时,使用了`master("local\[*\]")`来指定Spark应用程序的主节点为本地模式。而根据错误信息`org.apache.spark.SparkException: Master must either be yarn or start with spark, mesos, k8s, or local`,可以得出结论,Spark应用程序的主节点必须是`yarn`、`spark`、`mesos`、`k8s`或`local`。因此,要解决这个问题,你需要将`master`参数修改为其中一个合法的值,例如`yarn`或`local`。 #### 引用[.reference_title] - *1* *2* [Exception in threadmainorg.apache.spark.sql.AnalysisException: Cannot write incompatible data to](https://blog.csdn.net/weixin_46389691/article/details/127869342)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^koosearch_v1,239^v3^insert_chatgpt"}} ] [.reference_item] - *3* [Exception in threadmainorg.apache.spark.SparkException: Yarn application has already ended! It m](https://blog.csdn.net/weixin_38842096/article/details/109024966)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^koosearch_v1,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

月亮给我抄代码

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值