com.mongodb.spark.exceptions.MongoTypeConversionException: Cannot cast INT32 into a NullType的解决

12 篇文章 0 订阅
3 篇文章 0 订阅

0. 问题简述

mogo原生数据

 用spark取抽取过来之后老是报这个错误

Cannot cast INT32 into a NullType类型转换异常

Cannot cast STRING into BooleanType 类型转换异常

阅读官方文档:

1. sampleSize 设置参数可以解决部分问题

 

mogo为非关系型数据库,相同的字段会存不同的类型的值,

sampleSize这个参数在抽取的时候会默认取1000个样本,null的数据到达一定数量以后就会将原来的int转为null,从而出现以上错误,(具体是多少数量未知),

问题解决:

将sampleSize设为20000,样本数量足够大的时候,int的值达到一定数量,抽取时就会将null转为int还是integer,就有很大可能不会出现以上错误,

随取样的差异,任务任然存在失败的风险。。。。。

2. 要是设置参数依然无法解决,那么请检查你pom文件中的这三个依赖的版本跟你的spark,MongoDB的版本是否对应(2020-07-11更新)

 org.mongodb.spark.mongo-spark-connector_版本的对应关系传送门:

https://docs.mongodb.com/spark-connector/master/

org.mongodb.mongo-java-driver的版本传送门:

https://mvnrepository.com/artifact/org.mongodb/mongodb-driver

 

这是我原来依赖的版本:

 

 <groupId>org.mongodb.spark</groupId>
        <artifactId>mongo-spark-connector_2.11</artifactId>
        <version>2.3.2</version>
    </dependency>
    <dependency>
        <groupId>com.alibaba</groupId>
        <artifactId>fastjson</artifactId>
        <version>1.2.58</version>
    </dependency>
    <dependency>
        <groupId>org.mongodb</groupId>
        <artifactId>mongodb-driver</artifactId>
        <version>3.8.0</version>
    </dependency>

修改后的版本

 

 <dependency>
            <groupId>org.mongodb.spark</groupId>
            <artifactId>mongo-spark-connector_2.11</artifactId>
            <version>2.3.4</version>
        </dependency>
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>fastjson</artifactId>
            <version>1.2.58</version>
        </dependency>
        <dependency>
            <groupId>org.mongodb</groupId>
            <artifactId>mongodb-driver</artifactId>
            <version>3.4.3</version>
        </dependency>

 

3. 经过以上的一波操作,问题还是没解决,过几天同样的错误又出现了(2020-07-16更新)

一开始我是用dataframe的api去读MongoDB的数据,各种改,问题还是没有解决

val createdinfo = MongoSpark.load(spark, readcfgAdminuser)

最后用rdd的api读MongoDB的数据

 val info  = MongoSpark.load(spark.sparkContext, readcfgAdminuser1)

问题才得以解决,具体为什么dataframe会报类型转换异常,而rdd就不会,原因不为而知,待探索,具体还会出现什么问题,待续。。。。。。。

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值