Spark SQL HyperLogLog返回Bytes并计算两者

时间:2017-01-20 09:32:53

标签: apache-spark apache-spark-sql spark-dataframe

有没有办法在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输出保存为字节数组,并再次与当前数据集合并。它有效,但效率不高。

0 个答案:

没有答案