scala - 如何获取每个 user_id(列名)只有 10 行的新数据框?
问题描述
我有一个看起来像这样的数据框:
scala> df.show()
+-------+-------+
|user_id|book_id|
+-------+-------+
| 235610|2757548|
| 235610|2352922|
| 235610| 620968|
| 235610|1037143|
| 235610|2319578|
| ... | .... |
| 235610|1037143|
| 235610|2319578|
它在“user_id”列中有三个不同的用户,如下所示:
scala> val df1 = df.select("user_id").distinct()
scala> df1.show()
+-------+
|user_id|
+-------+
| 235610|
| 211065|
| 211050|
+-------+
每行数user("235610","211065","21050")
如下:
scala> df.filter($"user_id"==="235610").count()
res28: Long = 140
scala> df.filter($"user_id"==="211065").count()
res29: Long = 51
scala> df.filter($"user_id"==="211050").count()
res30: Long = 64
现在我的问题是如何获得每个 user_id 只有 10 行的新数据框?因为每个user_id("235610","211065","21050")
用户都有超过 10 条记录。
Spark 版本 2.3.0。任何帮助将不胜感激。
解决方案
您的 spark 版本是 1.4,等级适用于 hive 上下文。
所以在 hiveContext 上注册你的 df:
df.registerTempTable("tempDF")
val dfRanked = hiveContext.sql("select dataWithRank.*,
dense_rank() OVER
( PARTITION BY dataWithRank.book_id ORDER BY dataWithRank.book_id DESC) AS Rank
from tempDF as dataWithRank)
dfRanked.filter("Rank>10")
这里有关蜂巢等级的文档: http ://www.openkb.info/2016/02/difference-between-spark-hivecontext.html
推荐阅读
- ios - 当手机进入睡眠状态时,颤振热重载停止工作
- java - Utenti 未映射
- mongodb - 如何创建在另一个文件更新中隐式更新的派生 mongodb 字段?
- laravel - 如何将blade.php页面链接到laravel中的主页选项?
- javascript - 如何使图像看起来可以移动和旋转?
- c++11 - 如何让 SFINAE 检查不那么冗长?
- django - 手动运行预定的 zappa 函数
- python - 如何根据熊猫数据框中的多列按元素分组,并将每组的元素数量保存在另一列中?
- mysql - 从 RedShift 转换到 MySQL
- laravel - 如何从给定定义模型的关系名称中检索模型名称