Spark统计类StatCounter类

本文介绍如何使用Apache Spark中的StatCounter类进行数据统计,包括计数、最大值、最小值、平均值和求和,同时演示了如何统计值为0和非0数据的统计特性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

statCounter

org.apache.spark.util包中一个用于统计的类,这个类可以对一组数字进行统计追踪,可以统计他的计数,最大值,最小值,平均值,求和,以及可以合并两个追踪的结果merge。

example:统计一下不为0的数字和为0的数值的代码如下

package demo

import java.text.SimpleDateFormat
import java.util.Date
import java.time.LocalDate
import java.time.format.DateTimeFormatter
import java.util.Calendar
import java.util.Locale
import java.time.temporal.ChronoUnit
import org.apache.spark.sql.SparkSession
import org.apache.spark.SparkConf
import java.io.File
import org.apache.spark.util.StatCounter

object Test {
  def main(args: Array[String]): Unit = {

    System.setProperty("hadoop.home.dir", "F:\\dependies\\winutils\\hadoop-2.7.1")
    val conf = new SparkConf().setAppName("test").setMaster("local[2]")
    val spark = SparkSession.builder()
    .config(conf)
    .enableHiveSupport()
    .getOrCreate()
    val data = spark.sparkContext.parallelize(Seq(1,5,63,1,6,0,54,74,874,4,0),2)
    val res1 = data.map(myStatCount(_))
    val res2 = res1.reduce((x,y)=>x.merge(y))
    println
    data.foreach(println)
    res1.foreach(println)
    println
    println(res2)
  }
  class myStatCount extends Serializable{
    val stats = new StatCounter()
    var num_empty = 0L
    def add(x:Double):myStatCount = {
      if(x != 0) {
        stats.merge(x)
        } else {
          num_empty = num_empty + 1
        }
      this
    }
    def merge(other:myStatCount):myStatCount= {
      this.stats.merge(other.stats)
      num_empty = other.num_empty + num_empty
      this
    }
    override def toString()={
      s"stats = ${stats.toString()},num_empty = ${num_empty.toString}"
    }
  }
 object myStatCount extends Serializable{
    def apply(x:Double)= new myStatCount().add(x)
  }
}

这样就可以统计所有值为0的数据的个数。和值不为0的数据的最大值、最小值、平均值等

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

偷偷放晴的天空

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值