Spark合并DataFrame

发布于 2022-09-05 14:52:49 字数 715 浏览 41 评论 0

已经从hive中读取了两个DataFrame,showRecords为展示记录,playRecords为播放记录;vid为视频标识(还有其他字段,此处无关,省略)
showRecords:

vid
1
1
2
2
3
3
4

playRecords:

vid
1
2
1

问题,如何统计每个vid的展示次数和播放次数,得到类似如下结果(结果count_play降序排列):

vid  count_play  count_show
1    2           2
2    1           2
3    0           2
4    0           1

我尝试了

val mergeRecords = showRecords.groupBy("vid").agg("vid" -> "count").join(playRecords.groupBy("vid").agg("vid" -> "count"), Seq("vid"), "full_outer")

但结果不符合预期,没有按count_play排序,并且由于是full_outer join导致count_play列出现null值。(也尝试了别的方法,但那个vid容易出现问题,因为两个表的主键vid是同名的。)请教如何用比较优雅的方法解决这个问题?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

不及他 2022-09-12 14:52:49
val res = showRecords.groupBy("vid").agg(count("vid").as("showtimes")).join(playRecords.gr‌​oupBy("vid").agg(cou‌​nt("vid").as("playti‌​‌​mes")), Seq("vid"), "left").na.fill(0).orderBy(col("playtimes").desc)
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文