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



我有一个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数据帧,并对它们进行迭代,但两者都有错误。有什么简单的方法可以做到这一点吗?

提前感谢!

您可以使用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])

最新更新