在scala spark中,如何按列的百分位值过滤Dataframe

uxh89sit  于 2021-05-18  发布在  Spark
关注(0)|答案(1)|浏览(545)

假设我有这个Dataframe:

val df = Seq(("Mike",1),("Kevin",2),("Bob",3),("Steve",4)).toDF("name","score")


我想过滤这个Dataframe,这样它只返回“score”列大于等于75%的行。我该怎么做?
非常感谢,祝你今天愉快!

zzlelutf

zzlelutf1#

你想把你的过滤器建立在上四分位数的基础上。
它也被称为上四分位数或第75经验四分位数,75%的数据位于这一点以下。
根据这里的答案,你可以用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|
+-----+-----+

相关问题