首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >LabeledPoint类的Kryo注册

LabeledPoint类的Kryo注册
EN

Stack Overflow用户
提问于 2015-12-16 08:33:27
回答 1查看 859关注 0票数 1

我试图用Kryo注册运行一个非常简单的scala类。这个类只将数据从文件加载到RDD[LabeledPoint]中。

代码(来自于https://spark.apache.org/docs/latest/mllib-decision-tree.html中的代码):

代码语言:javascript
复制
import org.apache.spark.{SparkContext, SparkConf}

import org.apache.spark.mllib.linalg.Vectors
import org.apache.spark.mllib.regression.LabeledPoint



object test {
  def main(args: Array[String]) {

    val conf = new SparkConf().setMaster("local").setAppName("test")
    conf.set("spark.serializer", "org.apache.spark.serializer.KryoSerializer")
    conf.set("spark.kryo.registrationRequired", "true")
    val sc = new SparkContext(conf)

    sc.getConf.registerKryoClasses(classOf[ org.apache.spark.mllib.regression.LabeledPoint ])
    sc.getConf.registerKryoClasses(classOf[ org.apache.spark.rdd.RDD[org.apache.spark.mllib.regression.LabeledPoint] ])

    // Load data
    val rawData = sc.textFile("data/mllib/sample_tree_data.csv")
    val data = rawData.map { line =>
      val parts = line.split(',').map(_.toDouble)
      LabeledPoint(parts(0), Vectors.dense(parts.tail))
    }

    sc.stop()
    System.exit(0)
  }
}

据我了解,由于我已经设置了spark.kryo.registrationRequired = true,所有已使用的类都必须注册,这样我就注册了RDD[LabeledPoint]LabeledPoint

问题

我收到以下错误:

代码语言:javascript
复制
java.lang.IllegalArgumentException: Class is not registered: org.apache.spark.mllib.regression.LabeledPoint[]
Note: To register this class use: kryo.register(org.apache.spark.mllib.regression.LabeledPoint[].class);
    at com.esotericsoftware.kryo.Kryo.getRegistration(Kryo.java:442)
    at com.esotericsoftware.kryo.util.DefaultClassResolver.writeClass(DefaultClassResolver.java:79)
    at com.esotericsoftware.kryo.Kryo.writeClass(Kryo.java:472)
    at com.esotericsoftware.kryo.Kryo.writeClassAndObject(Kryo.java:565)
    at org.apache.spark.serializer.KryoSerializerInstance.serialize(KryoSerializer.scala:162)
    at org.apache.spark.executor.Executor$TaskRunner.run(Executor.scala:213)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
    at java.lang.Thread.run(Thread.java:745)

据我所知,这意味着类LabeledPoint[]没有注册,而我已经注册了类LabeledPoint

此外,错误注册类(kryo.register(org.apache.spark.mllib.regression.LabeledPoint[].class);)中提出的代码不起作用。

  • 这两门课有什么区别?
  • 我怎样才能注册这个班?
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-12-16 08:51:04

非常感谢@eliasah,他指出建议的解决方案(kryo.register(org.apache.spark.mllib.regression.LabeledPoint[].class);)使用的是Java,而不是Scala。

因此,LabeledPoint[]在Scala中的含义是Array[LabeledPoint]

我通过注册Array[LabeledPoint]类来解决我的问题,即在代码中添加:

代码语言:javascript
复制
sc.getConf.registerKryoClasses(classOf[ Array[org.apache.spark.mllib.regression.LabeledPoint] ])
票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34307201

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档