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



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

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)
  }
}

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

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

相关内容

最新更新