如何循环PySpark数据帧并打印前5次迭代?

2024-10-03 23:29:05 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个pyspark数据框架,它由一列和十行组成。我删除了上面代码中的其他列。 这就是它看起来的样子:

+--------------------+
|          movieTitle|
+--------------------+
|Across the Sea of...|
|Dog of Flanders, ...|
|      Bootmen (2000)|
|Relax... It's Jus...|
|Mating Habits of ...|
|        Belly (1998)|
|       Taffin (1988)|
|Love and Other Ca...|
|Shattered Image (...|
|Price Above Rubie...|
+--------------------+

我需要打印出带有索引的前5行。格式如下:

Movies recommended for you:
1: Silence of the Lambs, The (1991)
2: Saving Private Ryan (1998)
3: Godfather, The (1972)
4: Star Wars: Episode 6 - A New Hope (1977)
5: Shawshank Redemption, The (1994)

它不一定是那些精确的电影,只是那种格式。我尝试将其更改为RDD和pandas数据帧,并对其进行迭代,但两者都出现了错误。有什么简单的方法可以做到这一点吗

提前谢谢


Tags: ofthe数据代码框架格式pysparkacross
1条回答
网友
1楼 · 发布于 2024-10-03 23:29:05

您可以使用collect()movieTitle列中创建一个值列表,然后简单地对其进行迭代:

movies_list = df.select("movieTitle").collect()

n = 5
for i in range(n):
    print(str("%s: %s" % (i+1,movies_list[i][0])))

输出:

1: Silence of the Lambs, The (1991)
2: Saving Private Ryan (1998)
3: Godfather, The (1972)
4: Star Wars: Episode 6 - A New Hope (1977)
5: Shawshank Redemption, The (1994)

如果要向pyspark数据帧添加索引,可以使用row_number。(我使用的是一个没有分区的窗口,对于您的数据来说应该可以)

from pyspark.sql.window import Window
from pyspark.sql.functions import row_number, col, concat, lit

w = Window().orderBy("movieTitle")
df = df.withColumn("row_num", row_number().over(w)).withColumn("movieTitle",\
         concat(col("row_num"), lit(": "), col("movieTitle"))).drop('row_num')

movies_list = df.select("movieTitle").collect()

n = 5
for i in range(n):
    print(movies_list[i][0])

相关问题 更多 >