我是靠谱客的博主 迷路火车,最近开发中收集的这篇文章主要介绍Caused by: java.io.NotSerializableException: org.apache.spark.unsafe.types.UTF8String$IntWrapper,觉得挺不错的,现在分享给大家,希望可以做个参考。
概述
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时报错出现上述报错
val hiveCtx = new HiveContext(sc)
对比不同集群的spark版本,发现两台spark版本为2.2.0都会报这个错误
____ __
/ __/__ ___ _____/ /__
_ / _ / _ `/ __/ '_/
/___/ .__/_,_/_/ /_/_ 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)
而另一台低版本的集群不报错
____ __
/ __/__ ___ _____/ /__
_ / _ / _ `/ __/ '_/
/___/ .__/_,_/_/ /_/_ 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 麻烦一些,但是不会报上述错误。
//读取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 by: java.io.NotSerializableException: org.apache.spark.unsafe.types.UTF8String$IntWrapper所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复