2017-10-23 2 views
0

私はSparkのクロージャとそのシリアライゼーションを学んでおり、以下のようにデモを書いています。しかし、scala.reflect.ClassTagをインポートすると、「間違った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修飾子がありません。クラスはパブリックにする場合、あなたはすべての修飾子を追加しないでください:

class JavaSerializerTest { 
    ... 
} 

あなたはまた、民間のスパークメンバー(ByteBufferOutputStream)にアクセスしようとする試みのような他の多くの問題を、持っています。

+0

ありがとうございます。自分のByteBufferOutputStreamクラスを作成しました。 – lulijun

関連する問題