2016-10-13 8 views
0

私はスカラーが初めてです。 カスタムkryoシリアル化を実装しようとしています。私は2つのクラスと1つのオブジェクト持っているカスタムkryoSerializationフローがスカラのスパークで動作しません

操作を

package org.agg 
object Operation { 
    def main(args: Array[String]) { 
    var SparkConf = new SparkConf() 
     .setAppName("Operation") 
     .set("spark.io.compression.codec", "org.apache.spark.io.SnappyCompressionCodec") 
     .set("spark.serializer", "org.apache.spark.serializer.KryoSerializer") 
     .set("spark.kryo.registrationRequired", "true") 
     .set("spark.kryo.registrator", "org.agg.KryoClass") 

    var sc = new SparkContext(SparkConf) 
    var sqlContext = new org.apache.spark.sql.hive.HiveContext(sc) 
    println("**********Operation***********") 
    } 
} 

KryoClass

package org.agg 
class KryoClass extends KryoRegistrator { 
    def registerClasses(kryo: Kryo) { 
    println("**********KryoClass***********") 
    kryo.register(classOf[org.agg.KryoSerializeCode]) 
    } 
} 

KryoSerializeCode

package org.agg 
class KryoSerializeCode { 
println("**********KryoSerializeCode*************") 
} 

私は検討してい操作で、私はセットを書いていた場合クラス(「spark.kryo.registrator」、「org.agg.KryoClass」) だから、これはKryoClassを呼び出す必要がありますし、それが印刷されていることprintln( "********** KryoClass ***********")ログファイルのステートメント。 動作オブジェクトを実行する

コマンドは以下である:

--class org.agg.Operation --master糸--deployモード クラスタ--num-エグゼキュータ40をスパーク提出します - executor-core 1 --executor-memory 3400m --files /home/hive-site.xml --jars /usr/iop/4.1.0.0/spark/lib/datanucleus-api-jdo-3.2.6.jar、 /usr/iop/4.1.0.0/spark/lib/datanucleus-rdbms-3.2.9.jar,/usr/iop/4.1.0.0/spark/lib/datanucleus-core-3.2.10.jar /home/operation_jar .jar

しかし、それだけではないKryoClassまたはKryoSerializeCodeクラスに操作クラスのprint文を印刷している、これを実行した後。

それはKryoClassまたはKryoSerializeCodeクラス内のprint文を呼び出していない理由を誰も持っアイデアを実行してください。

+0

実行を無効にすることができます成功しているが、出力のみ**」**********操作です***** ****** "** – DSpark

答えて

0

スパークは、何かをする習慣があります遅れて - 実際に必要とされるまで不必要な操作を遅らせます。あなたが実際にを実行しなかったので、Kryoシリアライザの作成は、SparkContextの新しく作成されたものをで実行したようなので、Sparkはシリアライザの作成を邪魔しませんでした。

あなたOperation.mainに任意のスパークアクションを追加する場合、例えば:

sc.parallelize(List(1,2,3)).count() 

あなたが期待しているプリントアウトが表示されます。

注:あなたはさらにいくつかのクラスを登録する必要があり、またはjarのregistrationRequired

+0

Tzach Zoharありがとうございました。私は正確なものを探していた。 – DSpark

+0

** print statement inisde ** KryoClass **を呼び出していますが、** KryoSerializeCode **クラスの中でprintステートメントを呼び出していません。 – DSpark

+0

もちろん、あなたが 'KryoSerializeCode'のインスタンスを作成しているわけではないので、あなたが期待しているこのプリントはコンストラクタの一部であり、クラスはそのインスタンスを構築していません。 –

関連する問題