SPARK java.io.NotSerializableException 異常處理

摘自:http://blog.csdn.net/zengchen__acmer/article/details/52063908
最近一直在寫Spark 相關(guān)的項(xiàng)目, 但是以前從沒有接觸過spark 相關(guān)的東西, 只能是邊學(xué)邊用。 后面準(zhǔn)備在 這里記錄 在學(xué)習(xí)、使用spark過程中,遇到的問題 今天要記錄的問題是: 使用 spark alone 運(yùn)行模式下, 進(jìn)場遇到的問題—— Java.io.NotSerializableException
1、在哪幾種情況下, 會(huì)發(fā)生這個(gè)問題
(1)類、方法 沒有被序列化 類沒有被序列化, 代碼如下:

class GetData { def init(): Unit = { val rdd = sc.textfile(.....)
 val local = rdd.map(.....) }}

object test { val s = new GetData() s.init()}

這種情況下, 就會(huì)出現(xiàn) NotSerializableException 異常, 因?yàn)樵?Scala 中, 類是不會(huì)自動(dòng)序列化, 所以需要這樣改:

 class GetData extends java.io.Serializable {…..}

(2) 方法沒有被序列化在 scala 中, 盡管 函數(shù)(方法)會(huì)自動(dòng)序列化, 但是在下面那種情況, 是不會(huì)自動(dòng)序列化的

val local = rdd.map(theRow => { theRow.getString(0) })

注意上面的大括號(hào), 這種情況,scala 就不會(huì)自動(dòng) 序列化, 需要修改為

val local = rdd.map(transfrom)

def transfrom(theRow: org.apache.spark.sql.Row): String = { theRow.getString(0)}

(3)、傳入的參數(shù)有 SparkContext 這種情況下, 會(huì)出現(xiàn)著這種異常: java.io.NotSerializableException: org.apache.spark.SparkContext 原因是: SparkContext, 是不能被序列話的 所以, 這種情況下, 是不能把 SparkContext 當(dāng)成參數(shù), 進(jìn)行傳遞的
2、 org.apache.spark.SparkException: Only one SparkContext may be running in this JVM 產(chǎn)生這種情況的原因是: 在同一個(gè) driver(同一次 函數(shù)調(diào)用 或者 同一個(gè)main中) 定義了兩個(gè) sparkContext 這是不允許的, 只能定義一個(gè) sparkContext

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

推薦閱讀更多精彩內(nèi)容