val Size=5
val fixedLogs = rdd.map{row =>{
Size
}
}
在spark-shell 中宣告變數val Size=5;然后在map中參考,報錯"Task not serializable"該如何處理
謝謝大神們
uj5u.com熱心網友回復:
val bcSize = sc.broadCast(size)val fixedLogs = rdd.map{row =>{
bcSize.value
}
}
uj5u.com熱心網友回復:
因為你RDD的transform和action算子是在executor上執行的,而你寫的main方法,是在driver上運行,所以你不可能跨機器跨行程去訪問你在driver上的size。要訪問,只能用廣播變數。這個是在每一個executor上產生一個被廣播物件的副本。uj5u.com熱心網友回復:
不行啊。還是報錯uj5u.com熱心網友回復:
我用的是SQL的dataFrame.rdd.map以下代碼還是不能序列化
val bcSize = sc.broadcast(5)
val test = dayErrorDF.select("judge.*","fix.*").rdd.map{row =>bcSize.value
}
uj5u.com熱心網友回復:
scala> val df = sqlContext.range(1,1000)df: org.apache.spark.sql.DataFrame = [id: bigint]
scala> val bcSize = sc.broadcast(5)
bcSize: org.apache.spark.broadcast.Broadcast[Int] = Broadcast(0)
scala> val m = df.rdd.map{ row => bcSize.value }
m: org.apache.spark.rdd.RDD[Int] = MapPartitionsRDD[6] at map at <console>:31
scala> m.count
res2: Long = 999
一點問題沒有啊
uj5u.com熱心網友回復:
dayErrorDF.select("judge.*","fix.*") 我覺得是這部分的問題,我沒見過這種寫法。
你單獨dayErrorDF.select("judge.*","fix.*").show看看會不會報錯
uj5u.com熱心網友回復:
我用的是SQL的dataFrame.rdd.map
以下代碼還是不能序列化
val bcSize = sc.broadcast(5)
val test = dayErrorDF.select("judge.*","fix.*").rdd.map{row =>bcSize.value
}
val bcSize = sc.broadCast(size)
val fixedLogs = rdd.map{row =>{
bcSize.value
}
}
dayErrorDF.select("judge.*","fix.*") 我覺得是這部分的問題,我沒見過這種寫法。
你單獨dayErrorDF.select("judge.*","fix.*").show看看會不會報錯
可以顯示,就是一個嵌套,把“.*”去掉也不行,很奇怪。
uj5u.com熱心網友回復:
我用的是SQL的dataFrame.rdd.map
以下代碼還是不能序列化
val bcSize = sc.broadcast(5)
val test = dayErrorDF.select("judge.*","fix.*").rdd.map{row =>bcSize.value
}
val bcSize = sc.broadCast(size)
val fixedLogs = rdd.map{row =>{
bcSize.value
}
}
dayErrorDF.select("judge.*","fix.*") 我覺得是這部分的問題,我沒見過這種寫法。
你單獨dayErrorDF.select("judge.*","fix.*").show看看會不會報錯
可以顯示,就是一個嵌套,把“.*”去掉也不行,很奇怪。
你這問題重繪了我的三觀。。。spark版本是多少?
uj5u.com熱心網友回復:
我用的是SQL的dataFrame.rdd.map
以下代碼還是不能序列化
val bcSize = sc.broadcast(5)
val test = dayErrorDF.select("judge.*","fix.*").rdd.map{row =>bcSize.value
}
val bcSize = sc.broadCast(size)
val fixedLogs = rdd.map{row =>{
bcSize.value
}
}
dayErrorDF.select("judge.*","fix.*") 我覺得是這部分的問題,我沒見過這種寫法。
你單獨dayErrorDF.select("judge.*","fix.*").show看看會不會報錯
可以顯示,就是一個嵌套,把“.*”去掉也不行,很奇怪。
你這問題重繪了我的三觀。。。spark版本是多少?
1.6.0
uj5u.com熱心網友回復:
沒問題的
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/75825.html
標籤:Spark
上一篇:如何通過刷題提高演算法能力
