我是靠谱客的博主 迷路火车,最近开发中收集的这篇文章主要介绍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所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

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

评论列表共有 0 条评论

立即
投稿
返回
顶部