目录
分位数的定义与理解:
pyspark 中分位数查询
方式1 : 某列分位数查询: 采用dataframe的approxQuantile属性,返回一个list
例子:
方式2 : 转换为toPandas,利用pandas.dataframe利的describe直接传参给percentiles
分位数的定义与理解:
简单理解样本分位数就是一个从小到大排列的队伍中,用几分之几的形式来表达你当前所处的位置。
详细定义: 参考浙大的《概率论与数理统计》。
例子: 假如有1000个数字(正数),这些数字的5%, 30%, 50%, 70%, 99%分位数分别是 [3.0,5.0,6.0,9.0,12.0],这表明有5%的数字分布在0-3.0之间,有25%的数字分布在3.0-5.0之间,有20%的数字分布在5.0-6.0之间,有20%的数字分布在6.0-9.0之间,有29%的数字分布在9.0-12.0之间,有1%的数字大于12.0,这就是分位数的统计学理解。
pyspark 中分位数查询
方式1 : 某列分位数查询: 采用dataframe的approxQuantile属性,返回一个list
例子:
rdd = sc.parallelize([("Sam", 28, 88.52, "M"),
("Flora", 28, 90.55, "F"),
("Mey", 1, None, "M"),
("Chery", 7, 80.23, "F")])
test_exp_data = rdd.toDF(["name", "age", "score", "sex"])#建一个DataFrame
test_exp_data.approxQuantile(['age','score'],[0.0,0.1,0.2,0.5,1.0],0)
最后一个参数0为误差精度,可以设置任意如0.001等
输出:
[[1.0, 1.0, 1.0, 7.0, 28.0], [80.23, 80.23, 80.23, 88.52, 90.55]]
参考: approxQuantile-apache官方文档
方式2 : 转换为toPandas,利用pandas.dataframe利的describe直接传参给percentiles
.toPandas().describe(percentiles=[....])
test_exp_data.toPandas().describe(percentiles=[0.0,0.01,0.2,0.5,0.90,1.0])
输出:
age score count 4.000000 3.000000 mean 16.000000 86.433333 std 14.071247 5.467288 min 1.000000 80.230000 0% 1.000000 80.230000 1% 1.180000 80.395800 20% 4.600000 83.546000 50% 17.500000 88.520000 90% 28.000000 90.144000 100% 28.000000 90.550000 max 28.000000 90.550000
————————————————
参考: 链接:https://blog.csdn.net/wangwangstone/article/details/128525381