我是靠谱客的博主 迷路火车,这篇文章主要介绍Caused by: java.io.NotSerializableException: org.apache.spark.unsafe.types.UTF8String$IntWrapper,现在分享给大家,希望可以做个参考。

复制代码
1
2
3
org.apache.spark.SparkException: Task not serializable Caused by: java.io.NotSerializableException: org.apache.spark.unsafe.types.UTF8String$IntWrapper

使用hive on spark的时候,用HiveContext对象读取hive表数据后进行join时报错出现上述报错

复制代码
1
2
val hiveCtx = new HiveContext(sc)

对比不同集群的spark版本,发现两台spark版本为2.2.0都会报这个错误

复制代码
1
2
3
4
5
6
7
8
____ __ / __/__ ___ _____/ /__ _ / _ / _ `/ __/ '_/ /___/ .__/_,_/_/ /_/_ version 2.2.0-bc1.4.0 /_/ Using Scala version 2.10.6 (Java HotSpot(TM) 64-Bit Server VM, Java 1.8.0_77)

而另一台低版本的集群不报错

复制代码
1
2
3
4
5
6
7
8
____ __ / __/__ ___ _____/ /__ _ / _ / _ `/ __/ '_/ /___/ .__/_,_/_/ /_/_ version 1.5.1 /_/ Using Scala version 2.10.4 (Java HotSpot(TM) 64-Bit Server VM, Java 1.8.0_112)

解决办法:
如果自己搭的环境可以改变版本或者编译源码
参考文章:https://blog.csdn.net/lsr40/article/details/80166644

但如果无权限进行上述操作,可以通过spark读取hive表所在的文件目录再注册成表,通过spark-sql计算。会比直接用hive on spark 麻烦一些,但是不会报上述错误。

复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
//读取orc文件 val data = sqlContext.read.orc("hdfs:///user/hive/database1/table1/*") val data_map=data.rdd.map(_.split(",")) .map(x=>(x(0),x(1),x(2),x(3))) val df=data_map.toDF("c1","c2","c3","c4") df.createOrReplaceTempView("table1") //读取txt文件 val data=sc.textFile("hdfs:///user/hive/database1/table1/*") val data_map=data.map(_.split(",")) .map(x=>(x(0),x(1),x(2),x(3))) val df=data_map.toDF("c1","c2","c3","c4") df.createOrReplaceTempView("table1")

最后

以上就是迷路火车最近收集整理的关于Caused by: java.io.NotSerializableException: org.apache.spark.unsafe.types.UTF8String$IntWrapper的全部内容,更多相关Caused内容请搜索靠谱客的其他文章。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(93)

评论列表共有 0 条评论

立即
投稿
返回
顶部