如何在 java 中使用 Apache spark 计算中位数和众数?

Posted

技术标签:

【中文标题】如何在 java 中使用 Apache spark 计算中位数和众数?【英文标题】:How to calculate median and mode using Apache spark in java? 【发布时间】:2015-08-10 13:58:19 【问题描述】:

此页面包含均值、最大值、方差等,但不包含中值和众数。https://spark.apache.org/docs/1.1.1/mllib-statistics.html

我用这段代码解析数据

JavaRDD<Vector> parseData = data .map(new Function<String, Vector>()  
  /** * */
  private static final long serialVersionUID = 1L;
  public Vector call(String line) 
    // del = " " String[] sArray = line.trim().split(delimiterFinal);
    double[] values = new double[sArray.length];
    for (int i = 0; i < sArray.length; i++) 
      if (columnsSet.contains(i)) 
         values[i] = Double.parseDouble(sArray[i]);
      
    
  return Vectors.dense(values);
 

【问题讨论】:

afaik:你必须自己编写代码。但这很容易。 【参考方案1】:

是的,同意,您必须自己编写代码(不过是很好的练习)。例如中位数非常简单,您只需排序并找到中间点(查看中位数定义以获取详细信息)然后您有两种情况,一种分裂恰好发生在一个点(nvalues%%2=1)然后就是值或秒 (nvalues%%2=0) 然后是这两个值的平均值。

Mode 更简单,只是显示最多的值。

【讨论】:

计算精确中位数很简单,但在大型数据集上可能会非常昂贵。

以上是关于如何在 java 中使用 Apache spark 计算中位数和众数?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 Java API 将文本文件、图像存储到 Apache Spark 中?

如何在Spark提交中使用s3a和Apache spark 2.2(hadoop 2.8)?

Apache Spark:如何使用 Java 在 dataFrame 中的空值列中插入数据

如何在现有的 Web 应用程序中使用 apache spark

尝试使用 Apache spark Java API 透视表

在 spark java api( org.apache.spark.SparkException ) 中使用 filter(),map(),... 时出错