2017-04-04 6 views
0

私はspark 2.1.0とhadoop 2.7.3を使用しています。Spark newAPIHadoopFile(FileInputFormat)を使用するとNotSerializableExceptionが発生する

私はmainメソッドを持つだけで一つのクラスにnewAPIHadoopFile、非常に簡単なコードを使用しようとしていた:私はStackOverflowの中で多くの記事をチェックし、それでもエラーまし

val spark = SparkSession.builder().appName("test").master("local[*]").getOrCreate() 
 
    val sparkContext = spark.sparkContext 
 
    val sparkConf = sparkContext.getConf 
 
    val file = "src/main/resources/chat.csv" 
 
    sparkConf.set("spark.serializer", "org.apache.spark.serializer.KryoSerializer") 
 
    sparkContext.getConf.registerKryoClasses(Array(
 
     Class.forName("org.apache.hadoop.io.LongWritable"), 
 
     Class.forName("org.apache.hadoop.io.Text") 
 
    )); 
 
    sparkConf.set("spark.kryo.classesToRegister", "org.apache.hadoop.io.LongWritable, org.apache.hadoop.io.Text") 
 
    val rdd = sparkContext.newAPIHadoopFile(file, classOf[KeyValueTextInputFormat], classOf[Text], classOf[Text]) 
 
    rdd.collect().foreach(println)

java.io.NotSerializableException: org.apache.hadoop.io.Text 
 

 
Serialization stack: 
 

 
\t - object not serializable (class: org.apache.hadoop.io.Text, value: How about Italian?"}) 
 

 
\t - field (class: scala.Tuple2, name: _1, type: class java.lang.Object) 
 

 
\t - object (class scala.Tuple2, ( How about Italian?"},)) 
 

 
\t - element of array (index: 0) 
 

 
\t - array (class [Lscala.Tuple2;, size 3) 
 

 
\t at org.apache.spark.serializer.SerializationDebugger$.improveException(SerializationDebugger.scala:40)

編集:chat.csvの内容:{: "ゲルト"、へ: "メリッサ"、メッセージ: "夕食を持っていたいですか?" から}

{から: "メリッサ"、へ

: "ゲルト"、メッセージ: "OK?

どうイタリアについて\"}

が助けてください...

+0

はあなたがここにクラス名とすべて始まるからコードを貼り付けることはできますか? –

+0

全てのコードはこちらです。メインメソッドの宣言とインポートを除きます。 – Furyegg

答えて

0

私はあなたが私のマシンで火花1.6.0で提供される同じコードを実行していますよそれは正常に動作している(私はHDFSのタブ区切りファイルを使用して)。あなたが使っているspark/hadoopのバージョンは?

場合によっては(下位バージョンである可能性があります)テキストはシリアル化可能ではありません。だから、それは、以下のような

何かを文字列にマッピングし、もう一度試して収集する前に、newAPIhadoopFileの結果は

rdd.map(x=>(x._1.toString,x._2.toString)).collect().foreach(println)

はこれを試して、キー値のタプルになります。

REF:click here

+0

私はspark 2.1.0とhadoop 2.7.3を使用していますが、この情報を質問に追加します。ありがとう。 – Furyegg

+0

そして、その投稿がすでにspark 2.1.0で動作していないことを確認してください。 – Furyegg

+0

あなたの入力ファイルには何がありますか? –

関連する問題