2017-10-23 2 views
0

나는 Spark의 클로저와 그 serialization을 배우고 있으며 아래에 표시된 데모를 작성했습니다. 그러나 scala.reflect.ClassTag를 가져올 때 "잘못된 Top 문 선언"메시지가 나타납니다."잘못된 Top 문 선언"가져 오기 scala.reflect.ClassTag

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

"scala.reflect.ClassTag"는 클래스가 아닌 객체에서만 가져올 수 있습니다. – lulijun

답변

2

이것은 ClassTags과 아무 관련이 없습니다. Scala에는 public 수정자가 없습니다. 클래스가 공개하는 경우, 당신은 전혀 수정을 추가하지 않습니다 시도가 개인 스파크 회원 (ByteBufferOutputStream)에 액세스 할 수처럼

class JavaSerializerTest { 
    ... 
} 

또한, 다른 문제의 번호를 가지고.

+0

감사합니다. 내 자신의 ByteBufferOutputStream 클래스를 만들었습니다. – lulijun