假设我有这个数据帧:
val df = Seq(("Mike",1),("Kevin",2),("Bob",3),("Steve",4)).toDF("name","score")
我想过滤这个数据帧,以便它只返回"score“列大于等于第75个百分位数的行。我该怎么做呢?
非常感谢,祝你有愉快的一天!
发布于 2020-11-02 20:44:58
你想让你的过滤器基于的是upper quartile。
它也被称为上四分位数或第75个经验四分位数,75%的数据位于这一点以下。
根据答案here,您可以使用spark的approximateQuantile
来获得您想要的内容:
val q = df.stat.approxQuantile("score", Array(.75), 0)
q: Array[Double] = Array(3.0)
这个数组(q
)给出了第三个和第四个四分位数之间的边界。
使用一个简单的spark过滤器就可以得到你想要的:
df.filter($"score" >= q.head).show
+-----+-----+
| name|score|
+-----+-----+
| Bob| 3|
|Steve| 4|
+-----+-----+
https://stackoverflow.com/questions/64651093
复制