2016-10-29 11 views

答えて

5

あなたはScalaとJavaを混在させています。スカラ座では、あなたが(代わりにClass<?>[]の)Array[Class[_]]を定義することができます。

val conf = new SparkConf() 
      .setAppName("MyApp") 
      .set("spark.serializer", "org.apache.spark.serializer.KryoSerializer") 
      .registerKryoClasses(Array[Class[_]](
       Class.forName("org.apache.hadoop.io.LongWritable"), 
       Class.forName("org.apache.hadoop.io.Text") 
      )); 

val sc = new SparkContext(conf) 

は、私たちも少し良く行うことができます。間違った文字列リテラルを使用して、私たちのクラスを取得しないようにするために、我々は実際にクラスを利用し、そのクラス型を取得するためにclassOfを使用することができます。

import org.apache.hadoop.io.LongWritable 
import org.apache.hadoop.io.Text 

val conf = new SparkConf() 
      .setAppName("MyApp") 
      .set("spark.serializer", "org.apache.spark.serializer.KryoSerializer") 
      .registerKryoClasses(Array[Class[_]](
       classOf[LongWritable], 
       classOf[Test], 
      )) 

val sc = new SparkContext(conf) 
+0

これは実際に動作していますか?前回は1.5で試しましたが効果がありませんでした。私はクラスKryoを登録するJavaクラスを作成しなければなりませんでしたし、クラスを私のシリアライザとして使用する必要がありました。 – eliasah

+1

@eliasah私はSpark 1.6.1を使用し、そのようなkryoクラスの登録は私のために働きます。 –

+0

これは評論家ではありません。謙虚な質問だけ! :) – eliasah