当前位置: 首页 > 知识库问答 >
问题:

Scala—来自spark SQLContext dataframe的第一个四分位、第三个四分位和IQR,不带配置单元

卜勇
2023-03-14

我有一个数据帧:

data.show()
+--------+------+------------------+
|   Count|  mean|             stdev|
+--------+------+------------------+
|       5|  6337| 1684.569470220803|
|       3|  7224| 567.8250904401182|
|     330| 20280|23954.260831863092|
|      42| 26586|  32957.9072313323|
...
|      49| 23422|21244.094701798418|
|       4| 36949| 8616.596311769514|
|      35| 20915|14971.559603562522|
|      33| 20874|16657.756963894684|
|      14| 22698|15416.614921307082|
|      25| 19100| 12342.11627585264|
|      27| 21879|21363.736895687238|
+--------+------+------------------+

在不使用Hive的情况下,我希望得到“平均”列的第一个四分位数、第二个四分位数和IQR(四分位数范围)。

其他解决方案似乎使用了每个人都无法访问的蜂箱。

蜂箱解决方案1

蜂箱解决方案2

Python的解决方案

共有1个答案

段铭晨
2023-03-14

我想首先注意到,这似乎是一个相当昂贵的解决方案,但我得到了我想要的,而没有使用蜂巢。如果你能使用蜂巢,一定要这样做,因为它再简单不过了。

我最终使用了commons-math3 jar。使用它的诀窍是将数据从数据帧中取出并放入数组中,供math3库使用。我从这里解决了这个问题。您可能需要根据列的数据类型使用“asInstanceOf”。

import org.apache.commons.math3.stat.descriptive._

// Turn dataframe column into an Array[Long]
val mean = data.select("mean").rdd.map(row => row(0).asInstanceOf[Long]).collect()

// Create the math3 object and add values from the
// mean array to the descriptive statistics array
val arrMean = new DescriptiveStatistics()
genericArrayOps(mean).foreach(v => arrMean.addValue(v))

// Get first and third quartiles and then calc IQR
val meanQ1 = arrMean.getPercentile(25)
val meanQ3 = arrMean.getPercentile(75)
val meanIQR = meanQ3 - meanQ1
 类似资料:
  • 问题内容: 我有DataFrame: 我想获得该列的第一四分位数,第三四分位数和中位数。为了获得中位数,我使用。 如何计算四分位数? 问题答案: 通过使用:

  • 我有如下64位值: 1111 1111 1111 1111 1111 1111 1111 1111 1111 1111 1111 1111 1111 1111 1101 0011 给定数字流的十进制值为-45。 我想分成四个16位值: 1111111111111111111 1111111111111111111 1111111111111111111111111 1111111111111111

  • 注意:从 2014 年三月开始我就不再使用 GLFX了,但是为了那些对这个库感兴趣的人,我还是将这课保留了下来。 背景 这一课将要介绍的内容和之前的课程不同,在这一课中我们将简单介绍一下 GLFX 而不是 OpenGL 的特性或者 3D 技术。一个“特效”可以看做是一个包含多个着色器程序和函数的文本文件,并使得其能够更加方便的与我们的程序结合。这种方式克服了 glShaderSource() 函数

  • 我有几十个积压的请求在处理中,比如 我已经有了一个每天都在运行的函数,我只需要将:位附加到end。 考虑公历和时区的细微差别,我花的时间越少,我的生活就越好。 有人知道简化这种计算的Java库吗?没有xml配置或框架或任何东西。只有一个。Jar和一个文档化的、可读的API将是完美的。 任何帮助都将不胜感激。

  • 问题内容: 我有一个非常简单的表,像这样: 它包含来自不同传感器的数千条日志。 我希望所有传感器都具有Q1和Q3。 我可以对每个数据执行一次查询,但对所有传感器执行一次查询会更好(从一次查询中获取Q1和Q3) 尽管这将是一个相当简单的操作,因为四分位数被广泛使用,并且是频率计算中的主要统计变量之一。事实是,我发现了很多过于复杂的解决方案,而我却希望找到一些简洁明了的东西。 有人可以给我提示吗? 编

  • web管理界面 性能比较 插件开发