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-+\nRun 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-+\nRun Code Online (Sandbox Code Playgroud)\n我尝试过很多代码,如下所示:
\nfrom 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))\nRun Code Online (Sandbox Code Playgroud)\nWindow.partitionBy("xxx").orderBy("yyy")\nRun Code Online (Sandbox Code Playgroud)\n但上面的代码只是只有groupby值和设置索引,这会让我的df不按顺序。
我们可以只添加一列而不改变顺序吗?
\nApache Spark 中不存在顺序这样的东西,它是一个分布式系统,其中数据被分为称为分区的较小块,每个操作都将应用于这些分区,分区的创建是随机的,因此您将无法保留顺序除非您在 orderBy() 子句中指定,所以如果您需要保持顺序,则需要指定将使用哪一列来保持顺序。