【问题标题】:"Wrong Top statement declaration" when import scala.reflect.ClassTag导入 scala.reflect.ClassTag 时出现“错误的顶级语句声明”
【发布时间】:2018-04-03 19:57:56
【问题描述】:

我正在学习 Spark 的闭包及其序列化,我编写了一个演示,如下所示。但是在import scala.reflect.ClassTag时提示“Wrong Top statement declaration”。

package lulijun.scala.study.serialize

import java.io._
import java.nio.ByteBuffer

import org.apache.spark.serializer.{DeserializationStream, SerializationStream}
import org.apache.spark.util.{ByteBufferInputStream, ByteBufferOutputStream}

import scala.reflect.ClassTag


/**
  * Created by lulijun on 2017/10/23.
  */
public class JavaSerializerTest {


  def serialize[T: ClassTag](t: T): ByteBuffer = {
    val bos = new ByteBufferOutputStream()
    val out = serializeStream(bos)
    out.writeObject(t)
    out.close()
    bos.toByteBuffer
  }

  def deserialize[T: ClassTag](bytes: ByteBuffer, loader: ClassLoader): T = {
    val bis = new ByteBufferInputStream(bytes)
    val in = deserializeStream(bis, loader)
    in.readObject()
  }

  def serializeStream(s: OutputStream): SerializationStream = {
    new JavaSerializationStream(s, 1, true)
  }


  def deserializeStream(s: InputStream, loader: ClassLoader): DeserializationStream = {
    new JavaDeserializationStream(s, loader)
  }
}

【问题讨论】:

  • 好像“scala.reflect.ClassTag”只能导入到对象中,不能导入到类中。

标签: scala apache-spark serialization closures


【解决方案1】:

这与ClassTags 无关。 Scala 没有 public 修饰符。如果要公开类,则根本不添加修饰符:

class JavaSerializerTest {
  ...
}

您还有许多其他问题,例如尝试访问私有 Spark 成员 (ByteBufferOutputStream)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-09-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多