java.io.NotSerializableException: org.apache.hadoop.hbase.io.ImmutableBytesWritable
错误原因是因为 ImmutableBytesWritable不能进行序列化(在Java中,如果类需要序列化需要实现Serializable)
而文件在经过网络传输时需要序列化(网络传输是二进制传输)
(上图为Spark的官方文档 http://spark.apache.org/docs/2.2.0/index.html )
在官方文档中,提供了两种序列化的方式
Java serialization和Kryo serialization
并且推荐使用第二种序列化方式
代码实现
val sparkConf = new SparkConf()
.setAppName("ReadHBaseTableDataSpark")
.setMaster("local[2]")
//指定序列化格式,默认是java序列化
.set("spark.serializer", "org.apache.spark.serializer.KryoSerializer")
//告知哪些类型需要序列化
.registerKryoClasses(Array(classOf[ImmutableBytesWritable], classOf[Result]))