聚合操作
// 首先读取零售业的采购数据,然后对数据进行重划分以减少分区数量(因为我们事先知道仅有少量数据存储在大量的小文件里),
// 最后将这些数据缓存起来以便后续的快速访问
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()