有没有办法在Spark中运行HyperLogLog,返回相关的字节以便我可以保存它们,下次当我重新运行该方法时,我将使用当前输入+前一个字节,然后重新运行HLL。 Approx_distinct仅给出计数。 我正在使用twitter chill APi -
val instantiator = new ScalaKryoInstantiator
instantiator.setRegistrationRequired(false)
val kryo = instantiator.newKryo()
kryo.register(classOf[Array[com.twitter.algebird.HLL]])
kryo.register(classOf[com.twitter.algebird.SparseHLL])
kryo.register(classOf[com.twitter.algebird.Max[_]])
var meredSeq:Seq[HLL] = hllSeq
if(hbaseData != null && meredSeq != null && hbaseData.length > 0){
val input = new Input(new ByteArrayInputStream(hbaseData))
val deserialized:Seq[HLL] = kryo.readObject(input,classOf[Array[com.twitter.algebird.HLL]])
if(deserialized != null && deserialized.length > 0)
meredSeq = hllSeq ++ deserialized
}
val hllSum = hll.sum(meredSeq)
从上面我总是将HLL输出保存为字节数组,并再次与当前数据集合并。它有效,但效率不高。