apache-spark - 选择数据框中总和 = 50 的最大行数
问题描述
这是我的数据框
+--------------+-----------+------------------+
| _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% 的顶级国家(国家、乘客人数、乘客百分比)。我该怎么做?
解决方案
您可以使用运行总计来存储累积百分比,然后按它进行过滤。因此,假设您的数据框足够小,应该这样做:
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)
推荐阅读
- android - 如何解决 Android Studio 3.5 中的 INSTALL_FAILED_DEXOPT 错误?
- python - 如何改进质量差图像的文本检测?
- unity3d - 从 illustrator 导入资产作为 sprite 的问题
- ios - 将选择器从 UIViewController 传递给 UIView
- go - 如何优雅地使切片附加安全
- ssh - Secure-crt 的会话是什么?
- python - Floyd-Warshall 改进算法
- ios - 来自 SDWebImage 的 `sd_setImage` 导致的内存泄漏
- vue.js - 如何使用 vue 路由器打开对话框(设置组件状态)?
- html - 如何单独更改数组中的颜色?