我是新来的 Spark
我有一个
Spark dataframe
低于记录。我想根据counts列对数据进行降序排序,得到code列的前5位。
counts = to_df.groupBy("id", "code").count().select("id", "code", sf.col("count").alias("counts"))
sorting = counts.sort("code", ascending=False)
sorting.show()
我试过用 filter
以及 where
以及 head
. 但运气不好。如果不显式地提供值,我就不能使用where。我想让它充满活力。
数据
+--------+-------+-+
| id| code|counts|
+--------+-------+-+
| 1 | ZB| 2|
| 2 | ZB| 2|
| 3 | ZB| 1|
| 4 | ZB| 3|
| 5 | ZB| 1|
| 6 | ZB| 1|
| 7 | ZB| 3|
| 8 | XY| 3|
| 9 | XY| 1|
| 10| XY| 2|
| 11| XY| 1|
| 12| XY| 1|
| 13| XY| 1|
| 14| SD| 2|
| 15| SD| 1|
| 16| SD| 1|
| 17| SD| 3|
| 18| SD| 1|
| 19| SD| 2|
| 1 | SD| 7|
+--------+-------+-+
我想得到如下输出。有人能帮忙吗。
+--------+-------+-+
| id| code|counts|
+--------+-------+-+
| 7 | ZB| 3|
| 4 | ZB| 3|
| 1 | ZB| 2|
| 2 | ZB| 2|
| 5 | ZB| 1|
| 8 | XY| 3|
| 10| XY| 2|
| 11| XY| 1|
| 12| XY| 1|
| 13| XY| 1|
| 1 | SD| 7|
| 17| SD| 3|
| 14| SD| 2|
| 19| SD| 2|
| 18| SD| 1|
+--------+-------+-+
4条答案
按热度按时间pwuypxnk1#
pyspark版本,使用row\ u number()分析函数
jtw3ybtb2#
你可以试着用
row_number
然后过滤出row num>5的每组行。输出:
gc0ot86w3#
输出:
dpiehjr44#