选择dataframe中sum=50的最大行数

aydmsdu9  于 2021-05-27  发布在  Spark
关注(0)|答案(1)|浏览(446)

这是我的Dataframe

+--------------+-----------+------------------+
|           _c3|sum(number)|              perc|
+--------------+-----------+------------------+
|        France|    5170305|1.3201573334529797|
|       Germany|    9912088|2.5308982087190754|
|       Vietnam|   14729566| 3.760966630301244|
|United Kingdom|   19435674| 4.962598446648971|
|   Philippines|   21994132| 5.615861086093151|
|         Japan|   35204549| 8.988936539189615|
|         China|   39453426|10.073821498682275|
|     Hong Kong|   39666589|  10.1282493704753|
|      Thailand|   57202857|14.605863902228613|
|      Malaysia|   72364309| 18.47710593603423|
|     Indonesia|   76509597|19.535541048174547|
+--------------+-----------+------------------+

我只想选择占乘客总数50%的排名靠前的国家(国家、乘客人数、乘客百分比)。我该怎么做?

wpcxdonn

wpcxdonn1#

您可以使用运行总数来存储累积百分比,然后按其进行筛选。因此,假设您的Dataframe足够小,这样做应该可以:

import org.apache.spark.sql.expressions.Window
val result = df.withColumn("cumulativepercentage", sum("perc").over(
                  Window.orderBy(col("perc").desc))
               ).where(col("cumulativepercentage").leq(50))
result.show(false)

相关问题