Scala Spark Shell-对象不可序列化(类:org.apache.hadoop.hbase.client.Put

Scala Spark Shell-对象不可序列化(类:org.apache.hadoop.hbase.client.Put,scala,serialization,apache-spark,Scala,Serialization,Apache Spark,我正在Spark/Scala REPL上尝试一个简单的代码,但出现了此错误。如何解决此问题。我想使用RDD.saveAsNewAPIHadoopDataset(conf)将RDD保存到HBase 错误TaskSetManager:阶段5.0中的任务0.0(TID 17)有一个不可序列化的结果:org.apache.hadoop.hbase.client.PutPut是不可序列化的-因为它在映射闭包中,它将在工作节点上执行,因此需要序列化并从驱动程序发送到工作节点。因为它是不可序列化的,所以不会导

我正在Spark/Scala REPL上尝试一个简单的代码,但出现了此错误。如何解决此问题。我想使用RDD.saveAsNewAPIHadoopDataset(conf)将RDD保存到HBase


错误TaskSetManager:阶段5.0中的任务0.0(TID 17)有一个不可序列化的结果:org.apache.hadoop.hbase.client.Put

Put是不可序列化的-因为它在映射闭包中,它将在工作节点上执行,因此需要序列化并从驱动程序发送到工作节点。因为它是不可序列化的,所以不会导致异常。

我没有得到你的最后一个消息语句。“因为它是不可序列化的,所以不能导致异常。”如何解决此问题?因为它(Put)是不可序列化的,所以无法序列化(这是在工作进程上执行它所必需的)因此,您会得到一个不可序列化的结果。您可以通过在映射闭包中不使用Put来解决这个问题-您需要找到另一种方法来完成您试图执行的操作。
import org.apache.hadoop.hbase.{HBaseConfiguration, HTableDescriptor}
import org.apache.hadoop.hbase.client.HBaseAdmin
import org.apache.hadoop.hbase.mapreduce.TableInputFormat
import org.apache.hadoop.hbase.mapreduce.TableOutputFormat
import org.apache.hadoop.mapreduce.OutputFormat
import org.apache.hadoop.hbase.client.Mutation
import org.apache.hadoop.fs.Path
import org.apache.hadoop.hbase.HColumnDescriptor
import org.apache.hadoop.hbase.util.Bytes
import org.apache.hadoop.hbase.client.Put;
import org.apache.hadoop.hbase.client.HTable;
import org.apache.hadoop.hbase.io.ImmutableBytesWritable
import org.apache.hadoop.conf.Configuration
import scala.collection.mutable
import java.io.{IOException, File, ByteArrayOutputStream}
import org.apache.hadoop.hbase.util.Bytes
import org.apache.spark.HashPartitioner

val tableName = "test"
val cfIndex = "cf".getBytes()
val colIndexId = "c1".getBytes()

val RDD = sc.parallelize(List(("1","2"),("1","2"),("1","3"),  ("3","3")),2).repartition(2).mapPartitions { part =>
  val tableName = "test"
  val cfIndex = "cf".getBytes()
  val colIndexId = "c01".getBytes()
  part.map { case(k,v) =>       
    val put = new Put(k.getBytes())
    put.add(cfIndex, colIndexId, v.getBytes())
    (k, put)
  }
}