![](/img/trans.png)
[英]Why does a Spark application fail with “Exception in thread ”main“ java.lang.NoClassDefFoundError” in Eclipse?
[英]Why does Spark application work in spark-shell but fail with “org.apache.spark.SparkException: Task not serializable” in Eclipse?
為了將文件(由|分隔)保存到DataFrame中,我開發了下一個代碼:
val file = sc.textFile("path/file/")
val rddFile = file.map(a => a.split("\\|")).map(x => ArchivoProcesar(x(0), x(1), x(2), x(3))
val dfInsumos = rddFile.toDF()
用於創建DataFrame的case類的定義如下:
case class ArchivoProcesar(nombre_insumo: String, tipo_rep: String, validado: String, Cargado: String)
我已經使用spark-shell完成了一些功能測試,並且我的代碼工作正常,可以正確生成DataFrame。 但是,當我將程序執行到eclipse時,它將引發下一個錯誤:
我正在使用並運行eclipse的scala類中是否缺少某些東西。 還是我的功能在spark-shell上正常運行但在eclipse應用程序中無法正常運行的原因可能是什么?
問候。
我已經使用spark-shell完成了一些功能測試,並且我的代碼工作正常,可以正確生成DataFrame。
這是因為spark-shell
會為您創建一個SparkContext
實例。 然后, spark-shell
確保對SparkContext
引用不是來自“敏感位置”。
但是,當我將程序執行到eclipse時,它將引發下一個錯誤:
在Spark應用程序中的某個位置,您擁有對org.apache.spark.SparkContext
的引用,該引用不可序列化,因此可以阻止Spark計算被序列化並通過電線發送給執行者。
我認為
ArchivoProcesar
是一個嵌套類,並且嵌套類具有對外部類的引用,該外部類具有SparkContext
類型的SparkContext
因此,盡管從復制的代碼spark-shell
到Eclipse 已添加一些額外的線,你不顯示以為他們沒有必要的,這正好是完全相反。 找到您創建和引用SparkContext
所有地方,您將找到問題的根本原因。
我可以看到Spark處理發生在main
方法使用的ValidacionInsumos
類內。 我認為影響方法是LeerInsumosAValidar
map
變換的LeerInsumosAValidar
,這是您應該尋求答案的地方。
您的案例類必須具有公共作用域。 您不能在類中包含ArchivoProcesar
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.