2017-02-22 2 views
1

Ich versuche, Daten von Twitter durch Streaming zu bekommen. Ich erhalte Daten in twt Varibale.Scala (Zeppeline): Aufgabe nicht serialisierbar

val ssc = new StreamingContext(sc, Seconds(60)) 
val tweets = TwitterUtils.createStream(ssc, None, Array("#hadoop", "#bigdata", "#spark", "#hortonworks", "#HDP")) 
//tweets.saveAsObjectFiles("/models/Twitter_files_", ".txt") 
case class Tweet(createdAt:Long, text:String, screenName:String) 

val twt = tweets.window(Seconds(60)) 
//twt.foreach(status => println(status.text()) 

import sqlContext.implicits._ 

val temp = twt.map(status=> 
    Tweet(status.getCreatedAt().getTime()/1000,status.getText(), status.getUser().getScreenName()) 
    ).foreachRDD(rdd=> 
     rdd.toDF().registerTempTable("tweets") 
    ) 
twt.print 

ssc.start() 

hier ist der Fehler:

org.apache.spark.SparkException: Task not serializable 
     at org.apache.spark.util.ClosureCleaner$.ensureSerializable(ClosureCleaner.scala:304) 
     at org.apache.spark.util.ClosureCleaner$.org$apache$spark$util$ClosureCleaner$$clean(ClosureCleaner.scala:294) 
     at org.apache.spark.util.ClosureCleaner$.clean(ClosureCleaner.scala:122) 
     at org.apache.spark.SparkContext.clean(SparkContext.scala:2032) 
     at org.apache.spark.streaming.dstream.DStream$$anonfun$map$1.apply(DStream.scala:528) 
     at org.apache.spark.streaming.dstream.DStream$$anonfun$map$1.apply(DStream.scala:528) 
     at org.apache.spark.rdd.RDDOperationScope$.withScope(RDDOperationScope.scala:147) 
     at org.apache.spark.rdd.RDDOperationScope$.withScope(RDDOperationScope.scala:108) 
     at org.apache.spark.SparkContext.withScope(SparkContext.scala:709) 
     at org.apache.spark.streaming.StreamingContext.withScope(StreamingContext.scala:266) 

Caused by: java.io.NotSerializableException: org.apache.spark.streaming.StreamingContext 

Antwort

0

Ihre Tweet Klasse ist nicht Serializable, so dass verlängern.

Es ist ein verbreitetes Spark-Problem, und der Stapel sagt Ihnen genau, was da Spark-1.3 zu serialisiert versucht, glaube ich

+0

Ich habe wie folgt hinzugefügt: Fall-Klasse Tweet (createdAt: Lang, text: String, Screenname: String) erweitert Serializable. Ist das der richtige Weg? Becoz gibt mir den gleichen Fehler. – Bond

+0

Ja, das ist richtig. Kannst du mehr vom StackTrace zeigen? –

+0

http://i.imgur.com/eAT3tCr.png – Bond

Verwandte Themen