Pyspark如何在数据框中添加行号而不改变顺序?

Jas*_*ong 4 python dataframe apache-spark apache-spark-sql pyspark

我想为下面的数据框添加带有行号的列,但保留原始顺序。

\n

现有数据框:

\n
+-\xe2\x80\x94-+\n|val|\n+-\xe2\x80\x94-+\n|1.0|\n+-\xe2\x80\x94-+\n|0.0|\n+-\xe2\x80\x94-+\n|0.0|\n+-\xe2\x80\x94-+\n|1.0|\n+-\xe2\x80\x94-+\n|0.0|\n+-\xe2\x80\x94-+\n
Run Code Online (Sandbox Code Playgroud)\n

我的预期输出:

\n
+-\xe2\x80\x94-+-\xe2\x80\x94-+\n|idx|val|\n+-\xe2\x80\x94-+-\xe2\x80\x94-+\n|  1|1.0|\n+-\xe2\x80\x94-+-\xe2\x80\x94-+\n|  2|0.0|\n+-\xe2\x80\x94-+-\xe2\x80\x94-+\n|  3|0.0|\n+-\xe2\x80\x94-+-\xe2\x80\x94-+\n|  4|1.0|\n+-\xe2\x80\x94-+-\xe2\x80\x94-+\n|  5|0.0|\n+-\xe2\x80\x94-+-\xe2\x80\x94-+\n
Run Code Online (Sandbox Code Playgroud)\n

我尝试过很多代码,如下所示:

\n
from pyspark.sql.functions import row_number,lit\nfrom pyspark.sql.window import Window\nw = Window().orderBy(lit('A'))\ndf = df.withColumn("row_num", row_number().over(w))\n
Run Code Online (Sandbox Code Playgroud)\n
Window.partitionBy("xxx").orderBy("yyy")\n
Run Code Online (Sandbox Code Playgroud)\n

但上面的代码只是只有groupby值和设置索引,这会让我的df不按顺序。

\n

我们可以只添加一列而不改变顺序吗?

\n

Abd*_*heb 5

Apache Spark 中不存在顺序这样的东西,它是一个分布式系统,其中数据被分为称为分区的较小块,每个操作都将应用于这些分区,分区的创建是随机的,因此您将无法保留顺序除非您在 orderBy() 子句中指定,所以如果您需要保持顺序,则需要指定将使用哪一列来保持顺序。