我正在使用IntelliJ社區版與Scala插件和火花庫。我仍然在學習Spark,並且正在使用Scala Worksheet。Spark Scala:任務不可序列化錯誤
我已經寫了下面的代碼刪除標點符號的字符串:
def removePunctuation(text: String): String = {
val punctPattern = "[^a-zA-Z0-9\\s]".r
punctPattern.replaceAllIn(text, "").toLowerCase
}
然後我讀的文本文件,並嘗試刪除標點:
val myfile = sc.textFile("/home/ubuntu/data.txt",4).map(removePunctuation)
這給瞭如下錯誤,任何幫助將不勝感激:
org.apache.spark.SparkException:任務不可序列化 at org.apache.spark.util.ClosureCleaner $ .ensureSerializable(/home/ubuntu/src/main/scala/Test.sc:294) at org.apache.spark.util.ClosureCleaner $ .org $ apache $ spark $ util $ ClosureCleaner $$ clean(/home/ubuntu/src/main/scala/Test.sc:284) at org.apache.spark.util.ClosureCleaner $ .clean(/ home/ubuntu/src/main/scala /Test.sc:104) at org.apache.spark.SparkContext.clean(/home/ubuntu/src/main/scala/Test.sc:2090) at org.apache.spark.rdd.RDD $$ anonfun $ map $ 1.apply(/home/ubuntu/src/main/scala/Test.sc:366) at org.apache.spark.rdd.RDD $$ anonfun $ map $ 1.apply(/ home/ubuntu/src /主頁/ scala/Test.sc:365) at org.apache.spark.rdd.RDDOperationScope $ .withScope(/home/ubuntu/src/main/scala/Test.sc:147) at #worksheet#。#工作表#(/ home/ubuntu/src/main/scala/Test.sc:108) 導致:java.io.NotSerializableException:A $ A21 $ A $ A21 序列化堆棧: - 對象不可序列化(類:A $ A21 $ A $ A21,值:A $ A21 $ A $ A21 @ 62db3891) - 類(類:A $ A21 $ A $ A21 $$ anonfun $ words $ 1,名稱:$ outer,類型:class A $ A21 $ A $ A21) - 對象(class A $ A21 $ A $ A21 $$ anonfun 40) 在org.apache.spark.serializer.JavaSerializationStream.writeObject(JavaSerializer.scala::46) 在組織在org.apache.spark.serializer.SerializationDebugger $ .improveException(SerializationDebugger.scala $字$ 1,) 。 apache.spark.serializer.JavaSerializerInstance.serialize(JavaSerializer.scala:100) at org.apache.spark.util.ClosureCleaner $ .ensureSerializable(ClosureCleaner.scala:295) at org.apache.spark.util.ClosureClean在$ org.apache.spark.util.ClosureCleaner $ .clean(ClosureCleaner.scala:108) at org.apache.spark .SparkContext.clean(SparkContext.scala:2094) at org.apache.spark.rdd.RDD $$ anonfun $ map $ 1.apply(RDD.scala:370) at org.apache.spark.rdd.RDD $$ anonfun $ map $ 1.apply(RDD.scala:369) at org.apache.spark.rdd.RDDOperationScope $ .withScope(RDDOperationScope.scala:151) at org.apache.spark.rdd.RDDOperationScope $ .withScope(RDDOperationScope .scala:112) at org.apache.spark.rdd.RDD.withScope(RDD.scala:362) at org.apache.spark.rdd.RDD.map(RDD.scala:369) at A $ A21 $ A $ A21.words $ lzycompute(Test.sc:27) at A $ A21 $ A $ A21.words(Te st.sc:27) at A $ A21 $ A $ A21.get $$ instance $$ words(Test.sc:27) at A $ A21 $ .main(Test.sc:73) at A $ A21 。主要(Test.sc) 在sun.reflect.NativeMethodAccessorImpl.invoke0(本機方法) 在sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) 在sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java: 43) at java.lang.reflect.Method.invoke(Method.java:498) at org.jetbrains.plugins.scala.worksheet.MyWorksheetRunner.main(MyWorksheetRunner。Java的:22)
順便說一句。這可能是複製副本的副本..;)但是,我沒有時間搜索最佳答案,將問題標記爲重複。如果你找到了一些很好的解釋,請給我打電話,並將問題標爲重複 –
@Tawawa:謝謝你的回答,但我正處於學習階段,根本不理解。我在發佈之前搜索了這個問題。但是,他們都沒有深入解釋所有這些意思以及如何解決它。如果你可以建議一個可能的解決方案,那麼任何人在未來誰得到這個錯誤只會感謝你 – SumB
@sumitb這就是爲什麼我發佈這個答案:) –