《Spark 先知先觉》DataFrame 聚合操作

聚合操作

    // 首先读取零售业的采购数据,然后对数据进行重划分以减少分区数量(因为我们事先知道仅有少量数据存储在大量的小文件里),
    // 最后将这些数据缓存起来以便后续的快速访问
    val df = spark.read.format("csv")
      .option("header", true)
      .option("inferSchema", true)
      .load(inputPath)
      .coalesce(5) // 小分区合并
    df.cache()
    df.createOrReplaceTempView("dfTable")

聚合函数

/**
 *  聚合函数
 *  count 聚合操作是一个transformation 转换操作而不是一个动作操作
 *  在这种情况下,count 可以执行以下两项操作之一:
 *  1. 对指定的列进行计数
 *  2. 使用count(*) 或count(1)对所有列进行计数
 *  注意:
 *  1. 当执行count(*)时,Spark 会对null值进行计数,
 *  2. 而当对某指定列计数时,则不会对null值进行计数
 */

例子:计数
函数:count()
用例:

    df.select(functions.count("StockCode")).show()//541909

例子: 获得唯一组的数量可以使用countDistinct函数,而这个函数仅在统计针对某列的计数时才有意义
函数:countDistinct()
用例:

    /**
     * countDistinct
     * 获得唯一组的数量可以使用countDistinct函数,而这个函数仅在统计针对某列的计数时才有意义
     */
    df.select(countDistinct("StockCode")).show() //4070

例子:
函数:approx_count_distinct()
用例:在处理大数据集的时候,精确的统计计数并不那么重要,某种精度的近似值也是可以接受的,这时可以使用approx_count_distinct。rsd:允许的最大相对标准偏差(默认值=0.05)

    /**
     * approx_count_distinct
     * 在处理大数据集的时候,精确的统计计数并不那么重要,某种精度的近似值也是可以接受的,这时可以使用approx_count_distinct
     * rsd:允许的最大相对标准偏差(默认值=0.05)
     */
    df.select(approx_count_distinct("StockCode",0.1)).show() // 3364

例子:
函数: first 和last
用例:

    /**
     * first 和last
     *
     */
    df.select(first("StockCode"),last("StockCode")).show()

例子:
函数:min 和max
用例:

    /**
     * min 和max
     */
    df.select(min("Quantity"),max("Quantity")).show()

例子:
函数:sum()
用例: 使用sum函数累加一行中的所有值

    /**
     *  sum
     *  使用sum函数累加一行中的所有值
     */
    df.select(sum("Quantity")).show()

例子:
函数:sumDistinct()
用例:计算一组去重值进行求和

    /**
     *  sumDistinct
     *  计算一组去重值进行求和
     */
    df.select(sumDistinct("Quantity")).show()

例子:
函数:avg 或者mean 函数获取平均值
用例:

    // 在这个例子中使用alias 起别名,以便后面更方便使用
    df.select(count("Quantity").alias("total_transactions"),
      sum("Quantity").alias("total_purchases"),
      avg("Quantity").alias("avg_purchases"),
      expr("mean(Quantity)").alias("mean_purchases"))
      .selectExpr(
        "total_purchases/total_transactions",
        "avg_purchases",
        "mean_purchases"
      ).show()

例子:
函数:方差标准差
* pop 总体方差
* samp 样本方差
用例:

    /**
     * 方差标准差
     * pop 总体
     * samp 样本
     */
    df.select(var_pop("Quantity"), var_samp("Quantity"),
      stddev_pop("Quantity"), stddev_samp("Quantity")).show()

例子:
函数: skewness 偏度系数和kurtosis 峰度系数
用例:

    /**
     * skewness 偏度系数和kurtosis 峰度系数
     *
     */
    df.select(skewness("Quantity"), kurtosis("Quantity")).show()

例子:协方差和相关性
函数:cov 协方差, corr 相关性,相关性采用Pearson 相关系数来衡量-1~+1
用例:

    /**
     * 协方差和相关性
     * cov 协方差
     * corr 相关性,相关性采用Pearson 相关系数来衡量-1~+1
     */
    df.select(corr("InvoiceNo", "Quantity"), covar_samp("InvoiceNo", "Quantity"),
      covar_pop("InvoiceNo", "Quantity")).show()
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值