在RDD 中的map,filter等中的函数,都会被序列化后,再发送到各个节点去,所以需要map或者filter中的函数可以进行序列化,
如果函数中依赖于第三方jar包生成的对象,但是第三方jar中类并不可以序列化,则可以用将第三方的对象进行包装,加上transient注解
package bigdata.zetaskech
import java.io.{ObjectInputStream, ObjectOutputStream}
import com.google.zetasketch.HyperLogLogPlusPlus
class HyperLogLog extends Serializable{
@transient
var hll:HyperLogLogPlusPlus[String] = new HyperLogLogPlusPlus.Builder().buildForStrings()
val pathSet:mutable.Set[String] = mutable.Set[String]()
var count:Long = 0
def add(v:String):Unit = {
hll.add(v)
count = hll.longResult()
}
def merge(other: HyperLogLog):HyperLogLog = {
hll.merge(other.hll)
println(s"this ${hll.longResult()} other ${other.longResult}")
this
}
def numValues :Long= {
hll.numValues()
}
def longResult:Long = {
hll.longResult()
}
private de