Java 在Spark中是精确分位数还是近似分位数?
为了计算分位数,我使用Java 在Spark中是精确分位数还是近似分位数?,java,apache-spark,statistics,Java,Apache Spark,Statistics,为了计算分位数,我使用approxQuantile方法,该方法可从Spark的任何Dataset或Dataframe中的stat()函数访问。它接近它们的方式 @测试 @DisplayName(“法国公共人口分位数”) public void quantiles()抛出技术异常{ 数据集PopulationCommunies=individus()。选择Expr(“PopulationTotal”); double[]quantiles=populationcommunies.stat().ap
approxQuantile
方法,该方法可从Spark
的任何Dataset
或Dataframe
中的stat()
函数访问。它接近它们的方式
@测试
@DisplayName(“法国公共人口分位数”)
public void quantiles()抛出技术异常{
数据集PopulationCommunies=individus()。选择Expr(“PopulationTotal”);
double[]quantiles=populationcommunies.stat().approxQuantile(“populationtotal”,新的double[]{0.1,0.25,0.5,0.75,0.9},0);
LOGGER.info(“法国公社人口:\n Q(10%):{},Q(25%)={},Q(50%)={},Q(75%)={},Q(90%)={},”,
分位数[0]、分位数[1]、分位数[2]、分位数[3]、分位数[4]);
}
结果令人放心:
Population des communes françaises :
Q(10%) : 105.0, Q(25%) = 204.0, Q(50%) = 468.0, Q(75%) = 1186.0, Q(90%) = 3250.0
但是,如果我真的想得到准确的分位数值,而不是近似的分位数值,那么如何使用Spark
在这里,我有大约35000个城市:我很乐意花时间研究
Spark
数据集的每个值Spark中的approxQuantile
函数可以用来计算精确的分位数。从中我们可以看到有3个参数:
最后一个是relativeError
。这里的描述是:
relativeError—要达到的相对目标精度(大于或等于0)。如果设置为零,将计算精确的分位数,这可能非常昂贵。请注意,接受大于1的值,但给出的结果与1相同
所以你需要做的就是把这个参数设置为0.0
public double[][] approxQuantile(String[] cols, double[] probabilities, double relativeError)