赞
踩
这是spark保护函数的异常:传递局部可序列化变量或者顶级对象中的函数始终是安全的。
例如
val fun = new searchFun
// println(fun.isMath("rui"))
cj.map(word => {
fun.isMath(word)
}).take(3).foreach(println)
class searchFun{
def isMath(s : String) : Boolean = {
s.contains("rui")
}
以上会报 java.io.NotSerializableException
异常。
spark中函数要想在rdd中传递,是要序列化的,如果出现了java.io.NotSerializableException,那么说明这个函数是不可序列化的。
解决:
1、实现类继承java.io.Serializable
接口
class searchFun extends Serializable {
def isMath(s : String) : Boolean = {
s.contains("rui")
}
}
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。