Ich habe über Broadcast-Variablen in Spark gelernt, also habe ich versucht, es zu nutzen. Ich verwende Spark-Shell (Version 1.6.0). Im Anschluss ist mein Code:Objekt nicht serialisierbar org.apache.spark.SparkContext
scala> val pageurls = sc.parallelize(List(("www.google.com","Google"),("www.yahoo.com","Yahoo"))
pageurls: org.apache.spark.rdd.RDD[(String, String)] = ParallelCollectionRDD[0] at parallelize at <console>:27
scala> val pageCounts = sc.parallelize(List(("www.google.com",90),("www.yahoo.com",10)))
pageCounts: org.apache.spark.rdd.RDD[(String, Int)] = ParallelCollectionRDD[1] at parallelize at <console>:27
scala> val pageMaps = pageurls.collectAsMap
pageMaps: scala.collection.Map[String,String] = Map(www.yahoo.com -> Yahoo, www.google.com -> Google)
scala> val bMaps = sc.broadcast(pageMaps)
bMaps: org.apache.spark.broadcast.Broadcast[scala.collection.Map[String,String]] = Broadcast(2)
scala> bMaps.value
res0: scala.collection.Map[String,String] = Map(www.yahoo.com -> Yahoo, www.google.com -> Google)
scala> val newRdd = pageCounts.map{
| case (url,count) => (url,bMaps.value(url),count)}
newRdd: org.apache.spark.rdd.RDD[(String, String, Int)] = MapPartitionsRDD[2] at map at <console>:35
scala> newRdd.collect
res1: Array[(String, String, Int)] = Array((www.google.com,Google,90), (www.yahoo.com,Yahoo,10))
Der Code funktionierte gut, wenn ich Funken Shell ausgeführt und den Standard SparkContext sc verwenden, die erstellt werden, wenn Funken Shell aufgerufen wird. Ich habe jedoch meinen eigenen SparkContext erstellt und versucht, dieselbe Code-Sequenz auszuführen. Vor meiner eigenen Kontext zu schaffen, halte ich die SparkContext mit sc.stop erstellt Standard
sc.stop
import org.apache.spark.SparkConf
import org.apache.spark.SparkContext
import org.apache.spark.SparkContext._
val conf = new SparkConf().setMaster("local").setAppName("MyApp")
val sc = new SparkContext(conf)
Als ich SparkContext wie diese und verwenden Broadcasts Variable zu erstellen, ich die folgende Ausnahme erhalten: org.apache.spark.SparkException: Aufgabe nicht serializable
verursacht durch: java.io.NotSerializableException: org.apache.spark.SparkConf
Warum das so ist es passiert und was soll ich tun, damit ich diese Fehler nicht bekommen Alles, was ich? fehlt?
habe ich vergessen zu erwähnen, dass, bevor ich meinen eigenen Kontext schaffen, ich den Standardkontext durch Funken (sc.stop) erstellt stoppen. – user2430771
OKAY. Könnten Sie bitte die Ausgabe von println (sc.getConf.toDebugString) posten, bevor Sie den bestehenden Sparkconnext stoppen und einen neuen Sparkcontext erstellen? – hadooper